如何防止CleanWebpackPlugin删除静态文件

时间:2019-07-16 11:35:18

标签: webpack

我正在使用 CopyWebpackPlugin 将静态文件复制到分布式文件夹,但是 CleanWebpackPlugin 在我使用--watch模式时将其删除。因此,第一次复制文件时,第二次删除文件而不是重新复制。

<script src="~/Content/vendor/bootstrap/js/bootstrap.min.js"></script>
<script src="~/Scripts/jqBootstrapValidation.js"></script>
<script src="~/Content/vendor/jquery/jquery.min.js"></script>        
<script src="~/Scripts/contact_me.js"></script>

这两个模块可以同时使用吗?

2 个答案:

答案 0 :(得分:1)

我终于创建了自己的webpack插件。

const shell = require('shelljs')
const path = require('path');

function resolvePath(dir) {
  return path.join(__dirname, '../../../', dir);
}

module.exports = class CleanPlugin {
  // Define `apply` as its prototype method which is supplied with compiler as its argument
  apply(compiler) {
    // Specify the event hook to attach to
    compiler.hooks.emit.tapAsync(
      'CleanPlugin',
      (compilation, callback) => {
        let command = `rm -rf ${resolvePath("cordova/www")}/*.json`
        shell.exec(command)
        callback()
      }
    )
  }
}

并按如下所示使用它:

// require the module
const CleanPlugin = require('./webpack-plugins/clean-plugin/clean-plugin-class')

// inject in plugins array in webpack config file
new CleanPlugin()

如您所见,它仅在每次重建时都运行一个shell命令(甚至在监视模式下)。这个shell命令非常具体,我可以根据需要进行管理。

如果您有多个或许多Shell命令,则可以使用外部文件并将所有逻辑放在这里。

答案 1 :(得分:0)

显然,CopyWebpackPlugin复制的文件被视为过期文件并被删除。这对我来说可以跳过清理由CopyWebpackPlugin复制的文件:

new CleanWebpackPlugin({
   cleanStaleWebpackAssets: false,
}),