[英]Javascript / webpack : how to concatenate all json files in directory with a custom loop over files
我正在用webpack构建一个reactJs捆绑包。 我目前正在尝试将json文件连接成一个对象,以与i18next一起使用。 我觉得这很简单,我不想使用过于复杂的解决方案。
我有一个类似的目录结构
messages / locale_name / domain_name.json
如何在代码中的常规对象中导入所有json文件?
到目前为止,我从一开始就很努力,因为我发现了需要require('fs“)的建议,但是webpack告诉我它无法解析fs模块,而且我已经看到无法安装,因为它是其中的一部分默认节点配置。
一些帮助表示赞赏。
谢谢 !
经过大量的摸索,这实际上很容易。 以下是我最终得到的结果。 关键是正确设置JSON Loader。
安装JSON Loader for Webpack
npm install --save-dev json-loader
将JSON加载程序添加到Webpack加载程序
{ test: /\\.json$/, loader: 'json' },
module.exports = { entry: './src/app.js', output: { path: __dirname, filename: './build/bundle.js' }, module: { loaders: [ { test: /\\.json$/, loader: 'json' } ] } }
使用上下文将文件加载到其中并保存到数组中
在我的app.js中:
function requireAll( requireContext ) {
return requireContext.keys().map( requireContext );
}
var modules = requireAll( require.context("./modules", false, /.json$/) );
[Object, Object, Object]
,该数组将存储到var modules
最好用json-loader之类的东西完成
安装它( npm install json-loader --save-dev
)后,您可以按照项目自述文件中的描述进行导入:
var json = require("json!./messages/locale_name/domain_name.json");
或者您可以将加载程序添加到webpack.config.js并正常导入json:
webpack.config.js:
module: {
loaders: [
{test: /\.json$/, loader: 'json-loader'},
]
},
在您的来源中:
var json = require("./messages/locale_name/domain_name.json");
或者当然,如果您在项目中使用的是ES6导入
@Sébastien检查此插件https://www.npmjs.com/package/merge-jsons-webpack-plugin
您可以传递文件/模式数组作为输入,它将发出单个文件作为json。
例如,如果您在目录/ node_modules / module-a和/ node_modules / module-b中包含许多json文件
您可以使用以下模式将所有json连接到一个单个json文件中,如下所示
new MergeJsonWebpackPlugin({ "files": ['./jsons/file1.json', './jsons/file3.json', './jsons/file2.json'], "output":{ "fileName":"./dist/result.json" } })
免责声明:我对此插件做出了贡献
要合并json文件,请使用merge-webpack-plugin (例如,按文件名分组)
配置示例:
MergePlugin = require("merge-webpack-plugin");
module.exports = {
module: {
rules: [
{
test: /\.(json)$/i, use: [ MergePlugin.loader() ],
// also yaml by preloader there too
test: /\.(yaml)$/i, use: [ MergePlugin.loader(), 'yaml-loader' ],
}
]
},
plugins: [
new MergePlugin({
search: './src/**/*.json',
group: '[name]',
})
]
}
此示例文件将按文件名分为几组。 每个组将被加载并合并并保存到目标json文件中。 要要求目标合并文件,您只需要一个源文件并加载它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.