4

我正在使用 Laravel 5.4 和 mix 来版本我的 javascript 和 scss 文件。问题是:它不会清理以前构建的文件,而只是添加一个具有不同文件名的新文件,即app.9d3e179e85922aad6ccf.js

在我开始的一个新项目中,我没有这个问题。Mix 正确地将旧文件替换为最新构建的版本。

有什么地方我可以做出改变吗?

4

2 回答 2

3

这是 laravel-mix 库的一个问题,这里无法解决。GitHub 上有许多未解决的问题都涉及到相同的问题。在官方库得到永久修复之前,您可以查看最新的一些解决方法。

https://github.com/JeffreyWay/laravel-mix/issues/814

万一该链接将来无法使用,可能的解决方案。

目前几乎没有可能的解决方案。

  1. 让文件进入默认目录。

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

  2. 告诉 npm 在构建新的之前删除你的包文件夹

  3. 使用clean-webpack-pluginhttps://github.com/johnagan/clean-webpack-plugin
于 2017-06-04T12:37:31.250 回答
2

看起来现在旧文件被覆盖了,无论如何我仍然遇到mix-manifest.json文件不删除已删除文件的问题,所以如果其他人遇到类似问题,这就是我解决它的方法。

通过webpackConfig我使用splitChunksPluginfrom webpack 的方法,当模块之间有足够的共同代码时,它通过创建额外的块来减少块之间的重复。

这意味着在某些情况下,动态添加的块的总数在 dev 和 prod 环境之间是不同的,因为在开发中文件更大,因此在文件之间共享更多代码更容易。

因此,当构建删除文件时,mix-manifest 文件没有更新这一事实导致了一些问题(尤其是在与其他人一起工作时),我想分享一下我是如何解决这个问题的。

1. Laravel-Mix-Clean

为了避免文件过多,我将在每次构建时删除所有文件。我不得不更改文件夹结构并将正确的路径传递给该方法,但这并没有引起很多问题。

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

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

我希望这可以帮助其他有类似问题的人。

于 2021-01-04T15:41:55.857 回答