前端 npm run build打包 dist并压缩成 zip
umijs filemanager-webpack-plugin
config.defaut.ts
// yarn add filemanager-webpack-plugin --dev
import { 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 archiver
const 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"
}