我使用Webpack 2(通过Laravel Mix)编译不同语言的Javascript资源,就像Webpack自己的i18n plugin一样。不过,我已经构建了一个自定义实现,它可以很好地与Mix的助手一起使用。但是最后一个问题是,我无法解决这个问题,这与手表流程有关。以下是对所发生情况的总结:
en.[hash].js
,pt.[hash].js
等)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强制重建吗?
我能想到的另一个限制是:由于最终文件的哈希是在翻译之前生成的,即使我触发重建,哈希也会完全相同,因此在部署到生产时,浏览器会出现#39 ; s不知道翻译已更新,仍将提供脚本的缓存版本。这导致我:
2)有没有办法让Webpack重新生成哈希?或者,或者,在生成散列之前处理已编译文件的内容?