Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Load static JSON file in Webpack

I have somewhere in my code following construction:

var getMenu = function () {     return window.fetch("portal/content/json/menu.json").then(function (data) {         return data.json();     }); }; 

I tried in my webpack.config.js this:

module: {     loaders: [         ...         {             test: /\.json$/,             exclude: /node_modules/,             use: [                 'file-loader?name=[name].[ext]&outputPath=portal/content/json'             ]         },         ...    ] } 

Project structure:

dist   content      json         menu.json <- this is missing  src   content      json        menu.json <- source file 

Question:

How can webpack copy src/content/json/menu.json to dist/content/json/menu.json ?

like image 249
Leguest Avatar asked May 02 '17 10:05

Leguest


People also ask

What is JSON loader?

public class JSONLoader extends AbstractFileLoader implements BatchConverter, URLSourcedLoader. Reads a source that is in the JSON format. It automatically decompresses the data if the extension is '. json. gz'.

How do I import a JSON file into react?

To import JSON file in React, we use import to import it like a regular module. import Profile from "./components/profile"; to import the ./components/profile JSON file as Profile . This works because the json-loader Webpack module is included with create-react-app .


1 Answers

You're using fetch to request a JSON file and that will only happen at runtime. Furthermore, webpack only processes anything that is imported. You expected it to handle an argument to a function, but if webpack did that, every argument to a function would be considered a module and that breaks any other use for that function.

If you want your loaders to kick in, you can import the file.

import './portal/content/json/menu.json'; 

You can also import the JSON and use it directly instead of fetching it a runtime. Webpack 2 uses json-loader by default for all .json files. You should remove the .json rule and you would import the JSON as follows.

import menu from './portal/content/json/menu.json'; 

menu is the same JavaScript object that you would get from your getMenu function.

like image 181
Michael Jungo Avatar answered Sep 17 '22 20:09

Michael Jungo