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.

  1. Let files go in default directories.

    js mix.js('./resources/assets/js/app.js', 'public/js/app.js')

  2. Tell npm to delete your bundle folder before building new

  3. 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\"",
}

希望这对遇到类似问题的其他人有所帮助。