Webpack 如何将动态需求添加为外部需求?

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(`./

我有40多个json翻译文件,我希望动态地需要这些文件:

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();
    }
]

我想可能有更好的解决方案,也许这是一个网页错误。。。如果有人有更好的想法,我会接受的。

也许有助于理解它本身不起作用,但它将我转向了解决方案:上下文。所以,谢谢!