Webpack 如何将动态需求添加为外部需求?
我有40多个json翻译文件,我希望动态地需要这些文件:Webpack 如何将动态需求添加为外部需求?,webpack,webpack-4,Webpack,Webpack 4,我有40多个json翻译文件,我希望动态地需要这些文件: require(`./assets/locales/${lang}.json`) externals: [ /assets\/locales\/.*\.json/i, /assets\/locales\//i ], 由于webpack无法在编译时确定路径,它将加载目录中的每个文件(如前所述)。我不希望webpack在.js输出中捆绑这些文件,因此我添加了一个externals配置,如下所示: require(`./
require(`./assets/locales/${lang}.json`)
externals: [
/assets\/locales\/.*\.json/i,
/assets\/locales\//i
],
由于webpack无法在编译时确定路径,它将加载目录中的每个文件(如前所述)。我不希望webpack在.js
输出中捆绑这些文件,因此我添加了一个externals
配置,如下所示:
require(`./assets/locales/${lang}.json`)
externals: [
/assets\/locales\/.*\.json/i,
/assets\/locales\//i
],
问题是WebPACK不会考虑具有动态需求的require(`./assets/locales/en-us.json`)
require(`./assets/locales/pt-pt.json`)
但我不想在我的代码中添加40多行这样的代码。。。我希望将所有这些.json
文件作为外部依赖项,并能够动态地要求它们
有没有办法实现我想要的?我调查了一下,但在这件事上似乎帮不了我。如果使用,则无法加载json文件
谢谢 您可以这样使用:
require.context('./assets/locales/', false, /\.json$/);
您可以使用require.context()函数创建自己的上下文
它允许您传入要搜索的目录,一个指示
是否也应搜索子目录,以及
要匹配文件的表达式
生成时,webpack在代码中解析require.context()
如果您喜欢节点,则有一个用于该节点的节点。
让我知道它是否有效。:) 解决了!当webpack找到带有表达式的require时,它将继续。在这些情况下,webpack不会将
externals
与字符串或正则表达式匹配。但是,如果我们在外部定义中使用函数,它确实有效
结果如下:
externals: [
function (context, request, callback) {
if (/assets\/locales$/i.test(context)) {
return callback(null, './assets/locales/' + request);
}
callback();
}
]
我想可能有更好的解决方案,也许这是一个网页错误。。。如果有人有更好的想法,我会接受的。也许有助于理解它本身不起作用,但它将我转向了解决方案:上下文。所以,谢谢!