Webpack:手动添加的编译文件依赖项应该强制重建

时间:2017-04-30 09:38:30

标签: webpack webpack-2 laravel-mix

我使用Webpack 2(通过Laravel Mix)编译不同语言的Javascript资源,就像Webpack自己的i18n plugin一样。不过,我已经构建了一个自定义实现,它可以很好地与Mix的助手一起使用。但是最后一个问题是,我无法解决这个问题,这与手表流程有关。以下是对所发生情况的总结:

  • app.js文件有几个组成实际逻辑的依赖项
  • 指示Mix为每种语言创建一个不同的文件,其中每个语言的占位符字符串都可以用实际翻译替换(最终会输出en.[hash].jspt.[hash].js等)
  • Webpack将处理所有这些依赖项并创建包含所有代码的捆绑文件
  • 当Webpack即将发出最终文件时,我使用JSON文件(en.jsonpt.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重新生成哈希?或者,或者,在生成散列之前处理已编译文件的内容?

0 个答案:

没有答案