Laravel 混合版本控制不会删除旧的构建文件
Laravel mix versioning doesn't remove old built files
我正在使用 Laravel 5.4 和 mix 对我的 javascript 和 scss 文件进行版本控制。
问题是:它不会清除以前构建的文件,只是添加一个具有不同文件名的新文件,即 app.9d3e179e85922aad6ccf.js
在我开始的新项目中,我没有遇到这个问题。 Mix 正确地将旧文件替换为最新构建的版本。
有什么地方可以更改吗?
这是 laravel-mix 库的问题,无法在此处解决。 GitHub 上有许多未解决的问题都涉及同一问题。在官方库获得永久修复之前,您可以查看最新的一些解决方法。
https://github.com/JeffreyWay/laravel-mix/issues/814
万一 link 将来不起作用的可能解决方案。
There are few possible solution for now.
Let files go in default directories.
js mix.js('./resources/assets/js/app.js', 'public/js/app.js')
Tell npm to delete your bundle folder before building new
- Use the
clean-webpack-plugin
package https://github.com/johnagan/clean-webpack-plugin
现在看来旧文件已被覆盖,无论如何我仍然遇到 mix-manifest.json
文件未删除已删除文件的问题,所以如果其他人遇到类似问题,这是我解决它的方法。
通过 webpackConfig
方法,我使用了来自 webpack 的 splitChunksPlugin
,当模块之间有足够的共同代码时,它通过创建额外的块来减少块之间的重复。
这意味着在某些情况下,动态添加的块总数在开发环境和生产环境之间是不同的,因为在开发环境中文件更大,因此更容易在文件之间共享更多代码。
所以当构建删除文件时 mix-manifest 文件没有更新这一事实导致了一些问题(尤其是在与其他人合作时),我想分享我是如何解决这个问题的。
1。 Laravel-混合清洁
为了避免拥有超过需要的文件,我将在每次构建时删除所有文件。我不得不更改文件夹结构并将正确的路径传递给该方法,但这并没有引起很多问题。
npm install laravel-mix-clean --save-dev
并在混音文件中
require('laravel-mix-clean');
// [...]
.clean({
cleanOnceBeforeBuildPatterns: ['./js/*'],
});
2。删除清单
同步文件还不够,所以我不得不在每次新构建时删除清单文件。在我的设置中,我有三个并发构建(每个都有自己的 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\"",
}
希望这对遇到类似问题的其他人有所帮助。
我正在使用 Laravel 5.4 和 mix 对我的 javascript 和 scss 文件进行版本控制。
问题是:它不会清除以前构建的文件,只是添加一个具有不同文件名的新文件,即 app.9d3e179e85922aad6ccf.js
在我开始的新项目中,我没有遇到这个问题。 Mix 正确地将旧文件替换为最新构建的版本。
有什么地方可以更改吗?
这是 laravel-mix 库的问题,无法在此处解决。 GitHub 上有许多未解决的问题都涉及同一问题。在官方库获得永久修复之前,您可以查看最新的一些解决方法。
https://github.com/JeffreyWay/laravel-mix/issues/814
万一 link 将来不起作用的可能解决方案。
There are few possible solution for now.
Let files go in default directories.
js mix.js('./resources/assets/js/app.js', 'public/js/app.js')
Tell npm to delete your bundle folder before building new
- Use the
clean-webpack-plugin
package https://github.com/johnagan/clean-webpack-plugin
现在看来旧文件已被覆盖,无论如何我仍然遇到 mix-manifest.json
文件未删除已删除文件的问题,所以如果其他人遇到类似问题,这是我解决它的方法。
通过 webpackConfig
方法,我使用了来自 webpack 的 splitChunksPlugin
,当模块之间有足够的共同代码时,它通过创建额外的块来减少块之间的重复。
这意味着在某些情况下,动态添加的块总数在开发环境和生产环境之间是不同的,因为在开发环境中文件更大,因此更容易在文件之间共享更多代码。
所以当构建删除文件时 mix-manifest 文件没有更新这一事实导致了一些问题(尤其是在与其他人合作时),我想分享我是如何解决这个问题的。
1。 Laravel-混合清洁
为了避免拥有超过需要的文件,我将在每次构建时删除所有文件。我不得不更改文件夹结构并将正确的路径传递给该方法,但这并没有引起很多问题。
npm install laravel-mix-clean --save-dev
并在混音文件中
require('laravel-mix-clean');
// [...]
.clean({
cleanOnceBeforeBuildPatterns: ['./js/*'],
});
2。删除清单
同步文件还不够,所以我不得不在每次新构建时删除清单文件。在我的设置中,我有三个并发构建(每个都有自己的 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\"",
}
希望这对遇到类似问题的其他人有所帮助。