我的目录结构如下:
messages/locale_name/domain_name.json 如何将所有JSON文件导入到我的代码中作为一个正常的对象? 到目前为止,我遇到了一些问题,因为我找到的建议需要使用require('fs'),但是webpack告诉我它无法解析fs模块,我发现我不能安装它,因为它是默认节点配置的一部分。
需要一些帮助。
谢谢!
经过一番折腾,实际上很容易。以下是我最终得到的结果。关键在于正确设置JSON Loader。
安装Webpack的JSON Loader
npm install --save-dev json-loader
将JSON Loader添加到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
中。@Sébastien 请查看这个插件 https://www.npmjs.com/package/merge-jsons-webpack-plugin
您可以将文件/模式数组作为输入传递,它将发出单个json文件。
例如,如果您有许多json文件在目录/node_modules/module-a和/node_modules/module-b中
您可以使用以下模式将所有json连接成一个单独的json文件,如下所示
new MergeJsonWebpackPlugin({
"files": ['./jsons/file1.json',
'./jsons/file3.json',
'./jsons/file2.json'],
"output":{
"fileName":"./dist/result.json"
}
})
免责声明:我对此插件做出了贡献
最好使用类似 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导入,你也可以使用它
要合并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]',
})
]
}
fs
错误时,通常是因为我的路径错误或者使用了错误的加载器...类似这样的问题。最终总是发现我有些地方不正确,而错误信息又过于模糊,使得很难找出问题所在... - Jake