Удалить неиспользуемые файлы с webpack chunked

Я ищу информацию о том, как удалить старые файлы, загруженные в webpack. Вот моя текущая конфигурация 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. Тем не менее, старый остается, и я хочу, чтобы он был удален сразу.

  • Как удалить старую версию файла chunked?
  • Есть ли способ для меня подключиться после обратного вызова после завершения завершения компиляции?

Ответы

Ответ 1

В этих целях есть clean-webpack-plugin, или вы можете написать простой bash script для npm:

 "scripts": {
    "build": "rm -r dist/* && webpack -p",
    "clean": "rm -r dist/*"
  }

Ответ 2

Вот webpack-clean-obsolete-chunks плагин, который делает то, что вы хотите. Он ищет все обновленные куски и удаляет устаревшие файлы после каждой компиляции webpack.

Ответ 3

Я решил написать ответ, потому что другие, хотя и пытались дать прямой ответ на вопрос, на мой взгляд, упустили из виду самую важную часть.

И самая важная часть: вы не должны делать это таким образом. Использование заполнителей [hash] в вашей настройке разработки вызывает много головной боли при использовании других инструментов (например, автозаполнение пути phpstorm в плагине symfony). Кроме того, он плох для производительности инкрементальной компиляции webpack и поэтому не рекомендуется в официальных документах webpack (ссылка).

Так что для будущих читателей: просто сделайте это простым для конфигурации разработки - определите ваш filename как [name].js и двигайтесь дальше.

Ответ 4

Взгляните на этот запрос: https://github.com/johnagan/clean-webpack-plugin/pull/32/files

Откройте файл raw file и скопируйте его в index.js из чистого плагина webpack. Помните о флаге конфигурации → watch: true

Ответ 5

Я решил эту проблему, добавив ниже в webpack.config.js

const { CleanWebpackPlugin } = require('clean-webpack-plugin');    
{
  ... your configs ...
  plugins: [new CleanWebpackPlugin()]
}