Javascript 删除未使用的网页包分块文件
我正在寻找有关如何删除旧网页分块文件的信息。以下是我当前的网页包配置:Javascript 删除未使用的网页包分块文件,javascript,webpack,Javascript,Webpack,我正在寻找有关如何删除旧网页分块文件的信息。以下是我当前的网页包配置: var path = require('path'); var webpack = require('webpack'); module.exports = { debug: false, outputPathinfo: true, displayErrorDetails: true, context: __dirname, entry: { common: ['./src/common.cof
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
进行更改,它将使用新的chunkedhash编译该文件的较新版本。然而,旧的一个仍然存在,我希望它被删除的权利
npm
编写一个简单的bash
脚本:
请查看此拉取请求: 打开原始文件视图并将其复制到clean webpack插件的index.js。 记住关于config flag->watch:true这里是插件,它可以做你想要的。在每次编译
webpack
之后,它会搜索所有更新的块并删除过时的文件。答案
我决定写一个答案,因为其他人——尽管试图直接回答这个问题——忽略了我观点中最重要的部分
最重要的是:你不应该这样做。在开发设置中使用[hash]
占位符会给其他工具带来很多麻烦(例如symfony插件中phpstorm的路径自动完成)。此外,webpack的增量编译性能较差,因此官方webpack文档()不推荐使用它
因此,对于未来的读者:只需保持开发配置的简单-将您的文件名定义为[name].js
,然后继续
编辑
对于如何处理生产服务器上的旧块文件,似乎存在一种困惑。你什么都不做。一旦部署了一个版本,就永远不应该更改它。您只需在部署时不断创建新版本,并将以前的版本作为备份。为什么?
因为您希望回滚是可靠的,并且要使其成为可能,您的回滚需要非常简单和原子化。如果回滚过程所做的不仅仅是切换符号链接、重新路由到上一个容器(或类似的简单操作),那么您可能会™ 最后会有麻烦的
回滚不是再次“重新部署”应用程序的过程,而是现在重新部署到以前的版本。这是一个“取消”部署的过程。因此,对以前的版本进行git签出
,然后进行npm构建——但请快点——我恳求你不要失败
,当你的生产应用程序挂在那里时,完全爆炸不会在这里中断
重建以前版本的应用程序(就像部署一样)可能会由于许多原因而失败。这就是为什么回滚应该切换/重新路由回与已证明有效的版本构建完全相同的版本构建。不一样,100%一样。这就是为什么您需要保留以前的版本,因为这是相同的。“重新生成的”一个在最佳情况下只有==
是相同的,因此它没有被证明是有效的,只是假设了
而且,再多的CI、登台环境或其他任何东西都不能保证成功部署。正确做法的一部分是为事情出错做好准备。事情会出差错的。希望只是偶尔,但仍然
当然,一旦备份了3、5或
版本,您可能会开始删除最旧的版本,因为您可能不需要超过3个版本。我通过在webpack.config.js中添加以下内容解决了这个问题
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
{
... your configs ...
plugins: [new CleanWebpackPlugin()]
}
你可以解决这个问题№ 1通过使用
像这样使用此插件:
插件:[
新RemovePlugin({
观察:{
测试:[
{
文件夹:'./js',
方法:(absPath)=>newregexp(/(.*)-([^-\\\/]+)\.js/).test(absPath)
}
]
}
})
]
在“监视”模式下(非正常编译!),它从/js
文件夹中获取所有文件,并使用正则表达式/(.*)-([^-\\/]+)\.js/
测试它们。如果您在理解上有问题,请在(包括单元测试)上分析此正则表达式
注意:我是这个插件的创建者 适用于Windows用户
“脚本”:{
“构建”:“npm运行清理和网页包--生产模式”,
“清洁”:“del/f/s/q区1>nul”
}
看起来像webpack@5.20.0+具有对此的内置支持。我使用[chunkhash]
在我的区块文件名中,如果我停止注释动态导入,它们会被清除,如果我取消注释,它们会被添加回来。自从Webpack 5.20.0以来,你可以使用option我只需停止服务器,再次运行Thread serve
作者的意思是如何在使用哈希
时删除旧的区块--watch
cli选项。不幸的是,clean webpack插件与webpack--watch
一起工作(它将清理一次,之后每次更改时,同一文件的多个版本将开始堆积);可能是因为它真的不知道哪些块是过时的。谢谢你的B计划-为我节省了数小时的沮丧,因为我尝试不让干净的webpack插件删除东西两次。@klewis你可以使用“webpack clean Observe chunks”删除未使用的块文件,因为某些原因,它对观看
没有任何作用,只有正确的答案。我认为有些人可能只是对[hash]感到困惑,没有意识到您可以根据您是在开发还是在生产中有条件地使用它们。以及如何清理生产构建中的区块文件?所有旧的区块文件都保留了下来。好吧,prod中的问题似乎比dev中的问题更大。在本地,我可以时不时地删除文件夹而不会有风险。在服务器上,这可能会导致新捆绑正在运行时出现停机和意外行为等generated@mousetail在prod中,这不应该是al的担忧
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
{
... your configs ...
plugins: [new CleanWebpackPlugin()]
}