前端 npm run build打包 dist并压缩成 zip
umijs filemanager-webpack-plugin
config.defaut.ts
// yarn add filemanager-webpack-plugin --devimport { defineConfig } from 'umi';import filemanagerWebpackPlugin from 'filemanager-webpack-plugin'const { REACT_APP_ENV, UMI_ENV } = process.env;export default defineConfig({chainWebpack(config, { webpack }) {// 本地启动不使用此插件if (UMI_ENV === 'dev') return;config.plugin('filemanager-webpack-plugin').use(filemanagerWebpackPlugin, [{onEnd: {delete: ['./dist.zip'],archive: [{source: './dist',destination: './dist.zip',},],},},]);},})// speed-measure-webpack-plugin' // 打包速度分析插件//new FileManagerPlugin({events: {onEnd: {delete: [ './dist.zip'],archive: [{ source: './dist', destination: './dist.zip' }]}}})
https://chinabigpan.github.io/webpack-plugins-docs-cn/routes/webpack-file-manager-plugin.html
Archiver
https://www.archiverjs.com/docs/archiver
https://www.archiverjs.com/docs/quickstart
build-zip.js
// yarn add archiverconst fs = require('fs');const archiver = require('archiver');const pag = require('./package.json')const buildPath = 'build';const targets = ['dist']// __dirname 当前目录路径const outputPath = `${__dirname}/${pkg.name}.zip`// create a file to stream archive data to// 输出路径const output = fs.createWriteStream(outputPath);output.on('close', function () {console.info(`--------- 压缩完毕 ---------zip文件大小: ${(archive.pointer() / 1024 / 1024).toFixed(1)} MB请在当前项目路径下寻找 ${pkg.name}.zip 文件,系统路径为 ${outputPath}--------- 如需配置生成路径或文件名,请配置output ---------`);});output.on('end', function() {console.log('Data has been drained');});// 压缩配置const archive = archiver('zip', {zlib: { level: 9 } // Sets the compression level 压缩级别});archive.on('error', function (err) {throw err;});archive.pipe(output);archive.directory(`${__dirname}/${buildPath}/`, pkg.name);// for (i of targets) { archive.directory(i, i) }archive.finalize();
fs 这个内置库用来读取文件和写入文件,通过 fs提供的 createWriteStream的方法生成zip压缩包
定义变量 homedir获取当前项目的路径,
定义变量一个数组变量 target,表示需要打包的路径列表,需要打包哪些目录,添加其相对路径到数组里即可
scripts
{"dev": "vue-cli-service serve","build": "vue-cli-service build --mode production","clean": "rimraf dist.zip","zip": "node build-zip.js","deploy": "npm run build && npm run clean && npm run zip"}
- npm run build 可以打包我们的项目生成默认 dist 文件
- npm run clean 可以删除项目已有的 dist.zip 文件
- npm run zip 可以执行 node build-zip.js 命令,生成 zip 文件
- npm run deploy 命令,将 npm run build 、 npm run clean 、 npm run zip 三个命令串行执行
- && 表示上一个命令执行完了才会接着执行下一个命令
- 单个的 & 则表示上一个命令和下一个命令是同时触发的
rimraf 删除文件夹
rimraf https://www.npmjs.com/package/rimraf
前端执行打包命令时每次都会生成一个dist目录存放打包后的文件,生成打包文件之前我们需要先把 dist 目录里的所有文件全部删掉,
除了可以使用 rm -rf /dist/ 命令删除外,还可以使用 rimraf /dist/ 命令
以包的形式包装rm -rf命令,用来删除文件和文件夹的,不管文件夹是否为空,都可删除
相当于UNIX 命令 rm -rf
// rimraf <path> [<path> ...]"scripts": {"build": "rimraf dist && cross-env vite build"}
