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
?
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'.
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 .
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With