I am using Webpack's module.loaders
and file-loader
to copy several js-files when compiling:
module.loaders = [
{ test: /app\/locale\/moment\/.*\.js$/, loader: "file-loader?name=locale/moment/[name].[ext]" }
];
This works fine for me.
I want to do the same thing with JSON-files:
module.loaders = [
{ test: /app\/locale\/.*\.json$/, loader: "file-loader?name=locale/[name].[ext]" }
];
But this time it doesn't do anything.
Why does Webpack make a difference between js- and json-files when using the file-loader?
This is an adaptation of my answer to my own similar question.
You can copy JSON files via file-loader by adding the following code to you Webpack config:
module: {
rules: [
// ...
{
test: /\.json$/,
loader: 'file-loader?name=[name].json'
}
// ...
]
}
There are two nuances here: 1) file-loader will only copy files that are imported/required somewhere in your code and 2) file-loader emits a path to where the file was loaded, rather than the contents of the file itself.
So, to copy a JSON file you'll first need to import it, for example:
const configFile = require('../config.json');
Since file-loader emits a path to the where the file was loader, configFile
has the value "/config.json"
.
Now the contents of the JSON file can be loaded however you like, such as with jsonfile
jsonfile.readFile(configFile, function(err, obj) {
console.log(obj);
});
or with Angular's HTTP package
http.get(configFile).map(res => res.json()).catch((error: any): any => {
// ...
}).subscribe(obj => {
console.log(obj);
});
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