我正在使用 Laravel 5.4 和 mix 来版本我的 javascript 和 scss 文件。问题是:它不会清理以前构建的文件,而只是添加一个具有不同文件名的新文件,即app.9d3e179e85922aad6ccf.js
在我开始的一个新项目中,我没有这个问题。Mix 正确地将旧文件替换为最新构建的版本。
有什么地方我可以做出改变吗?
我正在使用 Laravel 5.4 和 mix 来版本我的 javascript 和 scss 文件。问题是:它不会清理以前构建的文件,而只是添加一个具有不同文件名的新文件,即app.9d3e179e85922aad6ccf.js
在我开始的一个新项目中,我没有这个问题。Mix 正确地将旧文件替换为最新构建的版本。
有什么地方我可以做出改变吗?
这是 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
看起来现在旧文件被覆盖了,无论如何我仍然遇到mix-manifest.json
文件不删除已删除文件的问题,所以如果其他人遇到类似问题,这就是我解决它的方法。
通过webpackConfig
我使用splitChunksPlugin
from webpack 的方法,当模块之间有足够的共同代码时,它通过创建额外的块来减少块之间的重复。
这意味着在某些情况下,动态添加的块的总数在 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
包.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\"",
}
我希望这可以帮助其他有类似问题的人。