首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除未使用的webpack分块文件

删除未使用的webpack分块文件
EN

Stack Overflow用户
提问于 2015-07-31 07:10:30
回答 11查看 22.4K关注 0票数 29

我在找关于如何删除旧的webpack分块文件的信息。这是我目前对webpack的配置:

代码语言:javascript
复制
var path = require('path');
var webpack = require('webpack');

module.exports = {
  debug: false,
  outputPathinfo: true,
  displayErrorDetails: true,
  context: __dirname,
  entry: {
    common: ['./src/common.coffee'],
    a: './src/a.cjsx',
    b: './src/b.cjsx'
  },
  output: {
    filename: '[name]-[chunkhash].js',
    chunkFileName: '[name].[chunkhash].js',
    path: path.join(__dirname, 'js')
  },
  plugins: [
    new webpack.optimize.CommonsChunkPlugin('common', 'common-[chunkhash].js'),
    new webpack.optimize.UglifyJsPlugin({
      compress: { warnings: false }
    })
  ],
  module: {
    preLoaders: [
      {
        test: /\.coffee$/,
        exclude: /node_modules/,
        loader: 'coffeelint-loader'
      }
    ],
    loaders: [
      { test: /\.coffee/, loader: 'coffee' },
      { test: /\.cjsx$/, loaders: ['coffee', 'cjsx'] },
      { test: /\.js$/, loader: 'jsx-loader?harmony' }
    ]
  }
}

如果我运行$(npm bin)/webpack --config webpack.js --watch并对a.cjsx进行更改,它会使用新的块散列编译该文件的较新版本。但是,旧的仍然存在,我希望立即将其删除。

  1. 如何删除分块文件的旧版本?
  2. 在观看完成编译后,有没有办法挂接到回调函数中?
EN

回答 11

Stack Overflow用户

发布于 2015-09-09 21:54:23

有一个clean-webpack-plugin可以实现这些目的,或者您可以为npm编写一个简单的bash脚本:

代码语言:javascript
复制
 "scripts": {
    "build": "rm -r dist/* && webpack -p",
    "clean": "rm -r dist/*"
  }
票数 20
EN

Stack Overflow用户

发布于 2017-03-25 21:43:02

这是webpack-clean-obsolete-chunks插件,它可以做你想做的事情。它搜索所有更新的块,并在每次webpack编译后删除过时的文件。

票数 15
EN

Stack Overflow用户

发布于 2018-11-14 04:43:21

答案

我决定写一个答案,因为其他人虽然试图直接回答这个问题,但在我看来,他们忽略了最重要的部分。

最重要的是:你不应该这样做。在您的开发设置中使用[hash]占位符会导致许多其他工具的问题(例如symfony插件中phpstorm的路径自动完成)。此外,它对于webpack的增量编译性能也很差,因此不被官方的webpack文档(reference)推荐。

因此,对于未来的读者:只需保持开发配置的简单性-将您的filename定义为[name].js,然后继续。

编辑

对于如何处理生产服务器上的旧块文件,似乎存在混乱。好吧,你什么都不做。一旦部署了一个版本,就不应该再对其进行更改。您只需在部署时不断创建新版本,并保留以前的版本作为备份。为什么?

因为您希望回滚是可靠的,并且要使其成为可能,您的回滚需要非常简单和原子。如果您的回滚过程只是切换符号链接、重新路由到以前的容器(或类似的简单操作),那么™很可能会遇到麻烦。

回滚不是再次“重新部署”应用程序的过程,而是现在到上一个版本的过程。这是一个“撤销”部署的过程。所以,当你的生产应用程序挂在那里时,对上一个版本执行git checkout,然后执行npm build --but-please-be-hurry --and-im-begging-you-dont-fail,完全爆炸在这里是行不通的。

重新构建应用程序的以前版本-就像部署一样-可能会因为许多原因而失败。这就是为什么回滚应该切换/重新路由回被证明有效的完全相同的版本。不是相同的,而是100% ===-==-same。这就是为什么您需要保留以前的版本,因为它是===-same。“重新生成”的是-在最好的情况下-只有==-是相同的,因此它没有被证明是有效的,只是假设。

不,再多的CI、临时环境或其他任何东西都不能保证部署成功。正确做法的一部分是为事情出错做好准备。事情就会变得糟糕。希望只是时不时的,但仍然如此。

当然,一旦你备份了3、5或<put-your-number-here>版本,你就可以开始删除最旧的版本,因为你可能永远不会需要超过3个版本。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31735584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档