在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 利用webpack的watch模式自動(dòng)打包,如何自動(dòng)刪除上一次打包的文件?

利用webpack的watch模式自動(dòng)打包,如何自動(dòng)刪除上一次打包的文件?

圖片描述

如圖,每次模塊修改保存,都會(huì)在dist目錄中生成a.xxx.js,這里的xxx為chunkhash,每次都不同,所以不會(huì)被替換掉。

條件:
①?lài)L試過(guò)clean-webpack-plugin插件,但是只能粗暴的指定把某個(gè)文件夾下的文件都刪除,這樣不需要?jiǎng)h除的一些打包好的文件也刪除了。而webpack的watch應(yīng)該只重新生成需要重新打包的文件。
②不采用webpack-de-server,因?yàn)榇藶榍昂蠖瞬环蛛x的傳統(tǒng)項(xiàng)目,沒(méi)法用webpack-de-server,只能把文件直接輸出到硬盤(pán)。

回答
編輯回答
歆久

rm -rf build/** && 打包操作

2018年7月4日 20:34
編輯回答
壞脾滊

以下是適配webpack4的解決方案:

  • 需要安裝 on-build-webpack2 插件
  • 在webpack.config.js里面加入這么一段
const fs = require('fs')
const buildDir = './dist/' // 這里寫(xiě)你自己的打包文件地址

...

config.plugins = config.plugins.concat([
    // 刪除build時(shí)舊的文件
    new WebpackOnBuildPlugin(function (stats) {
      const newlyCreatedAssets = stats.compilation.assets
      const unlinked = []
      const files = fs.readdirSync(path.resolve(buildDir))
      if (files.length) {
        files.forEach(file => {
          if (!newlyCreatedAssets[file]) {
            fs.unlinkSync(path.resolve(buildDir + file))
            unlinked.push(file)
          }
        })
        if (unlinked.length > 0) {
          console.log('刪除文件: ', unlinked)
        }
      }
    })
])
2017年12月22日 01:59
編輯回答
法克魷

我找到解決辦法了,看這個(gè)問(wèn)題。英文看不懂的話,看我的博客
總結(jié)就是

npm install --save-dev on-build-webpack
//webpack.config.js
var WebpackOnBuildPlugin = require('on-build-webpack');
var fs = require("fs");
//設(shè)置為你的目標(biāo)文件夾地址
var buildDir = './dist/';
……//省略代碼,直接到plugins設(shè)置
plugins:[
    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('刪除文件: ', unlinked);
              }
          });    
        })
]
2017年6月23日 22:17
編輯回答
念舊

最近剛好在做新的類(lèi)似的架構(gòu)。

我在開(kāi)發(fā)時(shí)候動(dòng)態(tài)生成的js和css其實(shí)都是不帶chunkHash的,用文件目錄控制同名問(wèn)題,所以不會(huì)出現(xiàn)這樣的問(wèn)題。
在打包輸出的時(shí)候是可以用chunkHash獨(dú)立生成新的目錄文件。

2018年1月21日 18:54
編輯回答
做不到

題主,你這個(gè)問(wèn)題確實(shí)應(yīng)該使用 clean-webpack-plugin 這個(gè)插件。

你說(shuō)你已經(jīng)嘗試過(guò)使用這個(gè)插件,但是只能指定把某一個(gè)文件夾下面的文件都刪除,這句話其實(shí)是不正確的,clean-webpack-plugin 可以指定刪除某一文件夾下的某一類(lèi)文件,你可以使用 node-glob 語(yǔ)法來(lái)指定你想要?jiǎng)h除的文件名稱(chēng)。例如,下面是我的項(xiàng)目中的一處該插件的配置。

/* 每次編譯生產(chǎn)環(huán)境代碼時(shí)先將之前的文件刪除掉 */
new CleanWebpackPlugin(
  [
    'build/app.*.js',
    'build/*.chunk.js',
    'build/styles.*.css',
    'build/styles.*.css.map',
  ],
  {
    verbose: true,
    dry: false,
  }
),

另外,這個(gè)插件是在你編譯打包代碼之前運(yùn)行的,因此你不必?fù)?dān)心編譯打包完成以后會(huì)把打包好的文件刪除。

或許你可以多看一下這個(gè)插件的使用手冊(cè)。

2017年6月3日 00:27