我正在寻找有关如何删除旧的webpack chunked文件的信息。这是我当前的webpack配置:
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编译该文件的较新版本。但是,旧版本仍然存在,我希望立即将其删除。
答案 0 :(得分:14)
出于这些目的有clean-webpack-plugin,或者您可以为bash
编写一个简单的npm
脚本:
"scripts": {
"build": "rm -r dist/* && webpack -p",
"clean": "rm -r dist/*"
}
答案 1 :(得分:10)
这是webpack-clean-obsolete-chunks
插件,它可以满足您的需求。它会在每次webpack
编译后搜索所有更新的块并删除过时的文件。
答案 2 :(得分:3)
我之所以决定写一个答案,是因为其他人尽管试图直接回答问题,却忽略了我认为最重要的部分。
最重要的部分是:您不应该这样做。在开发设置中使用[hash]
占位符会引起其他工具的麻烦(例如,symfony插件中的phpstorm的路径自动完成功能)。同样,它对于webpack的增量编译性能也不佳,因此不推荐使用官方webpack文档(reference)。
所以对于将来的读者:只需简化开发配置-将filename
定义为[name].js
并继续。
答案 3 :(得分:2)
看看这个拉取请求: https://github.com/johnagan/clean-webpack-plugin/pull/32/files
打开原始文件视图并将其复制到clean webpack插件的index.js。 记住配置标志 - >看:真的
答案 4 :(得分:1)
我通过在下面的webpack.config.js
中添加
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
{
... your configs ...
plugins: [new CleanWebpackPlugin()]
}
答案 5 :(得分:1)
看起来 webpack@5.20.0+ 已内置对此 https://webpack.js.org/configuration/output/#outputclean 的支持。我在块文件名中使用 [chunkhash]
,如果我停止注释动态导入,它们就会被清除,如果我取消注释它们,它们会被重新添加。
答案 6 :(得分:1)
从 Webpack 5.20.0 开始,您可以使用 output.clean
选项
答案 7 :(得分:0)
您可以使用remove-files-webpack-plugin解决问题№1。
像这样使用此插件:
plugins: [
new RemovePlugin({
watch: {
test: [
{
folder: './js',
method: (absPath) => new RegExp(/(.*)-([^-\\\/]+)\.js/).test(absPath)
}
]
}
})
]
在“监视”模式下(不是正常编译!),它会抓取./js
文件夹中的所有文件,并使用此正则表达式/(.*)-([^-\\\/]+)\.js/
对其进行测试。如果您对理解有疑问,请在regex101上分析此正则表达式(包括单元测试)。
注意:我是此插件的创建者。
答案 8 :(得分:0)
Windows 用户
"scripts": {
"build": "npm run clean && webpack --mode production",
"clean": "del /f /s /q dist 1>nul"
}
答案 9 :(得分:0)
我只需要停止我的服务器并再次运行 yarn serve