filemanager-webpack-plugin

673 阅读1分钟

filemanager-webpack-plugin

此插件用于在打包前后,复制,移动,删除,压缩(zip/tar/tar.gz)文件和目录

不支持打包成7z

FileManager Webpack Plugin.png

安装

npm install filemanager-webpack-plugin --save-dev

使用

// src/config/vueConfigs.js
const vueConfigs = {
    lintOnSave: true,
    devPort: 8088,
    webpackBarName: 'pics-pms',
    webpackBanner:
        ' build: pics-pms \n time: ',
    build7z: true,
    // 生产环境构建文件的目录名
    outputDir: 'dist'
};
module.exports = vueConfigs;
// vue.config.js

const FileManagerPlugin = require('filemanager-webpack-plugin');
const {  
title,  
lintOnSave,  
devPort,  
webpackBanner,  
webpackBarName,  
build7z,  
outputDir  
} = require('./src/config');
const dayjs = require('dayjs');  
const date = dayjs().format('YYYY_M_D'); // 注意不能使用time

chainWebpack: config => {
        if (build7z) {
            config.when(process.env.NODE_ENV === 'production', (config) => {
                config
                    .plugin('fileManager')
                    .use(FileManagerPlugin, [
                        {
                            events: {
                                onEnd: {
                                    archive: [
                                        {
                                            source: `./${outputDir}`,
                                            destination: `./${outputDir}/${title}_${outputDir}_${date}.zip`,
                                        },
                                    ],
                                },
                            },
                        }
                    ])
                    .end()
            })
        }
}

注意不能使用time,原因如下

使用 time 变量可能会导致无法暂停打包,这是因为 time 变量的值是一个精确到毫秒的时间戳字符串,每次打包生成的压缩文件名称都会不同,即使只修改了一点点代码也会改变,这导致 webpack 在打包时无法使用缓存,每次都要重新构建,从而导致无法暂停。

相比之下,使用 date 变量的值是一个精确到秒的时间字符串,并且在一秒内多次打包生成的压缩文件名称是相同的,这样就可以利用 webpack 的缓存机制来提高打包速度,从而可以暂停和继续打包。

因此,建议在使用插件进行文件管理时,尽量避免使用精确到毫秒的时间戳,可以使用精确到秒的时间信息,或者其他具有唯一性的标识符。这样可以减少不必要的重复构建,提高构建效率,并且可以更好地支持打包的暂停和继续。

示例2

const FileManagerPlugin = require('filemanager-webpack-plugin') // 引入
const packageName = 'dist'
chainWebpack(config) {
     config.plugin('fileManager')
      .use(FileManagerPlugin).tap(args => [{
        events: {
          onEnd: {
            delete: [ // 首先需要删除项目根目录下的dist.zip
              `./${packageName}.zip`
            ],
            archive: [ // 选择文件夹将之打包成xxx.zip并放在根目录
              { source: `./${packageName}`, destination: `./${packageName}.zip` }
            ]
          }
        }
     }])
}

示例3

const FileManagerPlugin = require('filemanager-webpack-plugin')
module.exports = {
     configureWebpack: {  
         plugins: [
             new FileManagerPlugin({  
                 onEnd: {
                     mkdir: ['./dist'], // 新加的一句代码
                     delete: [   
                         './dist.zip',
                     ],
                    archive: [ 
                         {source: './dist', destination: './dist.zip'},
                     ]
                 }
             })
         ]
     }
 };