Webpack 网页包:手动添加的编译文件依赖项应强制重新生成

Webpack 网页包:手动添加的编译文件依赖项应强制重新生成,webpack,webpack-2,laravel-mix,Webpack,Webpack 2,Laravel Mix,我正在使用Webpack2(通过LaravelMix)以不同的语言编译Javascript资产,很像Webpack自己的。不过,我已经构建了一个自定义实现,它可以很好地与Mix的助手配合使用。不过,还有最后一个问题,我想不起来了,那就是观察过程。以下是正在发生的事情的摘要: 一个app.js文件有几个依赖项,它们构成了实际的逻辑 Mix被指示为每种语言创建一个不同的文件,其中每种语言的占位符字符串都可以被实际翻译替换(这最终将输出en.[hash].js,pt.[hash].js等) Webp

我正在使用Webpack2(通过LaravelMix)以不同的语言编译Javascript资产,很像Webpack自己的。不过,我已经构建了一个自定义实现,它可以很好地与Mix的助手配合使用。不过,还有最后一个问题,我想不起来了,那就是观察过程。以下是正在发生的事情的摘要:

  • 一个app.js文件有几个依赖项,它们构成了实际的逻辑
  • Mix被指示为每种语言创建一个不同的文件,其中每种语言的占位符字符串都可以被实际翻译替换(这最终将输出
    en.[hash].js
    pt.[hash].js
    等)
  • Webpack将处理所有这些依赖项,并创建一个包含所有代码的捆绑文件
  • 当Webpack即将发出最终文件时,我使用JSON文件(
    en.JSON
    pt.JSON
    ,等等;顺便说一句,Laravel自己的语言JSON文件)处理带有实际语言字符串的翻译占位符
JSON文件不包含在实际的
app.js
文件中,因此Webpack在执行
watch
时会忽略它们。当我更改这些JSON文件时,我设法触发了编译,不过,通过将它们作为依赖项注入插件的
apply
方法:

compiler.plugin('emit', (compilation, callback) => {
    mix.config.locales.forEach(_.bind(function (locale) {
        const file = path.resolve(this.translationsPath, `${locale}.json`)
        if (!_.includes(compilation.fileDependencies, file)) {
            compilation.fileDependencies.push(file);
        }
    }, this))
    callback()
})
问题是,即使当我更改语言JSON文件时,Webpack重新编译了我的
app.js
,因为它们不是脚本的一部分,所以Webpack不会识别任何更改,也不会重新生成脚本,因此任何实际的翻译更改在观看期间都不会生效

1) 当JSON文件更改时,我可以告诉webpack强制重新生成吗

我能想到的另一个限制是:由于最终文件的哈希值是在翻译之前生成的,即使我触发了重建,哈希值也将完全相同,因此在部署到生产环境时,浏览器的哈希值不会知道翻译已更新,并且仍将提供缓存版本的脚本。这让我想到:

2) 有没有办法让Webpack重新生成散列?或者,在生成哈希之前处理已编译文件的内容