Javascript / webpack:如何连接目录中的所有json文件,并使用自定义循环覆盖文件

我正在用webpack构buildreactJs包。 我目前正试图将json文件连接到一个对象,以便与i18next一起使用。 我觉得这很简单,我不想使用过于复杂的解决scheme。

我有一个目录结构

消息/ LOCALE_NAME / domain_name.json

如何导入我的代码中的常规对象中的所有json文件?

到目前为止,我一开始正在努力,因为我发现需要('fs')的build议,但webpack告诉我它不能解决fs模块,我已经看到我不能安装它,因为它是默认节点configuration。

有些帮助赞赏。

谢谢 !

经过大量的努力,实际上很简单。 下面是我结束了。 关键是让JSON加载程序正确设置。

为Webpack安装JSON加载程序

  1. npm install --save-dev json-loader

将JSON加载器添加到您的Webpack加载器

  1. 这是使用上下文来拉入文件所必需的。
  2. 把这个添加到你的webpack.config.js加载器{ test: /\.json$/, loader: 'json' },
  3. 决赛可能是这样的:
 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$/) ); 
  1. 其中“模块”是从我的app.js(在我的情况下./src/modules)子目录。
  2. 所有的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

您可以传递文件/模式数组作为input,它会发射单个文件为JSON。

例如,如果在目录/ node_modules / module-a和/ node_modules / module-b中有许多json文件

你可以使用下面的模式来连接所有的jsons成一个像下面的单个json文件

new MergeJsonWebpackPlugin({ "files": ['./jsons/file1.json', './jsons/file3.json', './jsons/file2.json'], "output":{ "fileName":"./dist/result.json" } })

免责声明:我对这个插件做出了贡献

要合并json文件,请使用merge-webpack-plugin (也可以按文件名进行分组)

configuration示例:

 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文件中。 要求目标合并文件,你只需要一个源文件并加载它。