Laravel混合版本控制不会删除旧的构建文件

时间:2017-06-04 10:41:32

标签: laravel webpack mix

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

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

是否有可以进行更改的地方?

2 个答案:

答案 0 :(得分: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.   
  3. 告诉npm在构建新

  4. 之前删除您的包文件夹   
  5. 使用clean-webpack-pluginhttps://github.com/johnagan/clean-webpack-plugin
  6.   

答案 1 :(得分:2)

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

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

这意味着在某些情况下,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

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

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