我正在使用Laravel 5.4 with mix来版本化我的javascript和scss文件。
问题是:它不会清理以前构建的文件,只需添加一个具有不同文件名的新文件,即app.9d3e179e85922aad6ccf.js
在我开始的一个新项目中,我没有这个问题。 Mix正确地将旧文件替换为最新的内置版本。
是否有可以进行更改的地方?
答案 0 :(得分:3)
这是laravel-mix库的一个问题,这里无法解决。 GitHub上存在许多未解决的问题,指的是同一个问题。您可以查看最新的一些解决方法,直到官方图书馆获得永久修复。
https://github.com/JeffreyWay/laravel-mix/issues/814
如果链接未来无法使用,可能会有解决方案。
现在几乎没有可能的解决方案。
让文件进入默认目录。
js mix.js('./resources/assets/js/app.js', 'public/js/app.js')
- 之前删除您的包文件夹
告诉npm在构建新
- 使用
醇>clean-webpack-plugin
包https://github.com/johnagan/clean-webpack-plugin
答案 1 :(得分:2)
现在看起来旧文件被覆盖了,无论如何我仍然遇到mix-manifest.json
文件没有删除被删除的文件的问题,所以如果其他人遇到类似的问题,这里是我是怎么解决的。
通过 webpackConfig
方法,我使用了 webpack 中的 splitChunksPlugin
,当模块之间有足够的共同代码时,它通过创建额外的块来减少块之间的重复。
这意味着在某些情况下,dev 和 prod 环境之间动态添加的块的总数是不同的,因为在开发中文件更大,因此更容易在文件之间共享更多代码。
因此,当构建删除文件时,mix-manifest 文件未更新这一事实导致了一些问题(尤其是在与其他人合作时),我想分享我是如何解决该问题的。
为了避免文件多于需要,我将在每次构建时删除所有文件。我不得不更改文件夹结构并将正确的路径传递给该方法,但这并没有引起很多问题。
npm install laravel-mix-clean --save-dev
在混合文件中
require('laravel-mix-clean');
// [...]
.clean({
cleanOnceBeforeBuildPatterns: ['./js/*'],
});
让文件同步是不够的,所以我必须在每个新版本中删除清单文件。在我的设置中,我有三个并发构建(每个都有自己的 webpack.mix
文件),所以我不知道哪个会先完成。
解决方案是安装 del-cli
包(由 clean-webpack-plugin
内部使用,而 laravel-mix-clean
使用它)并在每次构建之前删除清单文件。
npm install del-cli --save-dev
package.json
"scripts": {
"clear-manifest": "del-cli public/mix-manifest.json",
// [...]
"development": "npm run clear-manifest && concurrently \"npm run css-dev\" \"npm run js-dev\" \"npm run js-dev-modern\"",
}
我希望这能帮助其他有类似问题的人。