Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当webpack--监视时,如何从构建目录中删除旧文件?_Javascript_Webpack - Fatal编程技术网

Javascript 当webpack--监视时,如何从构建目录中删除旧文件?

Javascript 当webpack--监视时,如何从构建目录中删除旧文件?,javascript,webpack,Javascript,Webpack,当mywebpack.config.js设置为监视源文件,并且输出文件包含散列时,则每次构建成功完成时,都会存在一组全新的构建文件。这会很快用cruft填充builddir 如何使webpack删除每个构建中的旧文件 module.exports = { ... watch: true, output: { filename: '[name]-[hash:8].js' } ... } 我认识到我可以使用webpack dev server在内存中构建,但这不适合我

当my
webpack.config.js
设置为监视源文件,并且输出文件包含散列时,则每次构建成功完成时,都会存在一组全新的构建文件。这会很快用cruft填充builddir

如何使
webpack
删除每个构建中的旧文件

module.exports = {
  ...
  watch: true,
  output: {
    filename: '[name]-[hash:8].js'
  }
  ...
}


我认识到我可以使用
webpack dev server
在内存中构建,但这不适合我当前的构建过程。

两个
clean webpack plugin
webpack shell plugin
都不能满足这些要求,因为它只在整个webpack过程之前或之后运行,而不仅仅是在构建之后

但是,使用该插件,您可以在构建完成时运行任意函数。在该函数中,取消build dir中所有并非刚刚创建的文件的链接。
assets
对象被传递到函数中,并具有刚刚创建的资产集

const fs = require('fs');
const WebpackOnBuildPlugin = require('on-build-webpack');

const buildDir = '...path/to/your/build-dir/';

module.exports = {

  watch: true,

  new WebpackOnBuildPlugin(function(stats) {
    const newlyCreatedAssets = stats.compilation.assets;

    const unlinked = [];
    fs.readdir(path.resolve(buildDir), (err, files) => {
      files.forEach(file => {
        if (!newlyCreatedAssets[file]) {
          fs.unlink(path.resolve(buildDir + file));
          unlinked.push(file);
        }
      });
      if (unlinked.length > 0) {
        console.log('Removed old assets: ', unlinked);
      }
  });

})

更新:最初的项目已经结束,但这里有一个截至2020年的最新分支:。还有来自著名的hashicorp组织的文件。

我有一个build.js文件,我使用node执行该文件。在该文件中,我从
webpack.config.js
导入了webpack的配置。我将所有配置保存在名为
config
的变量中

require("shelljs/global");

var webpack = require('webpack');
var conf = require('./webpack.config.js');
var ora = require('ora');

var spinner = ora('chargement...');
spinner.start();
// I use the rm command that is provide by the module "shellsjs/global"
rm("-rf", "build");

webpack(conf, function(err, stats){
    spinner.stop();
    if(err) throw error
    process.stdout.write(stats.toString({
        color:true,
        modules:false,
        children:false,
        chunk: false,
        chunkModule:false
    }) + '\n')
})

我希望这能帮助别人,因为我花了很长时间才弄明白!你确实为我节省了很多时间,谢谢@Chris W.正是我需要的,谢谢。要添加到代码示例中的2个微小修改:buildDir应该以尾随/结尾,并添加
const fs=require('fs')一开始就好了非常感谢@ChrisW。这节省了我很多时间!;)另一个避免弃用警告的修改是将
fs.unlink
更改为
fs.unlinkSync
,或对异常进行回调。如果文件名
require(“shelljs/global”)中有哈希,该怎么办
rm(“-rf”,“build”)按预期工作!巧妙的把戏。我的
build
目录将根据命令重新生成。