archiver
是一个在nodejs
中能跨平台实现打包功能的模块,通过 stream
的方式,可以打zip
和tar
包。api文档
1. 安装
js
npm install archiver -D
如果没有安装cross-env
也需要安装
js
npm install cross-env -D
安装dayjs
插件
js
npm install dayjs -D
2. 新增配置文件
在根目录下新增 archiver.config.js
配置文件,内容如下:
js
/**
* @description
* 快速导出压缩包 需要安装依赖 npm install archiver -D
* 这个库的文档地址 https://github.com/archiverjs/node-archiver
* 可以在 package.json 中配置 script 命令 npm run build 之后直接 进行 导出 zip 压缩包
* @example 将需要导出的目录添加到target数组中 命令行执行 node export-zip.js 即可
*/
const fs = require("fs");
const path = require("path");
const archiver = require("archiver");
const dayjs = require("dayjs");
// 是否是生产环境
const isProduction = process.env.VUE_APP_NODE_ENV === "production";
// 拼接路径
const resolve = (...dirs) => path.resolve(__dirname, ...dirs);
// 新建路径
const createDir = (path) => {
const pathArr = path.split("/");
let i = 0;
while (pathArr[i]) {
const currentPath = resolve(...pathArr.slice(0, i + 1));
const isExits = fs.existsSync(currentPath);
i++;
if (isExits) {
continue;
}
fs.mkdirSync(currentPath);
}
};
//配置要打包的路径列表,需要打包某些目录,添加到数组里面即可 相对路径
const target = isProduction ? ["dist/"] : ["dist/"];
const outputDir =
"zip/" +
process.env.VUE_APP_NODE_ENV +
"/" +
dayjs().format("YYYY-MM-DD") +
"/" +
dayjs().format("HH-mm-ss");
const outputName = "dist_" + dayjs().unix() + ".zip";
// 创建路径
createDir(outputDir);
// 默认在当前目录路径生成此文件 dist.zip
const outputFullName = resolve(outputDir, outputName);
const output = fs.createWriteStream(outputFullName);
const archive = archiver("zip", {
zlib: { level: 9 } // 设置压缩级别
});
archive.on("error", function (err) {
console.log("error: ", err);
throw err;
});
output.on("close", function () {
console.log(`
--------- ---------压缩完毕--------- ---------
生成文件大小${(archive.pointer() / 1024 / 1024).toFixed(1)}MB
请在当前项目路径下寻找 dist.zip 文件,系统路径为 ${outputFullName}
---------如需配置生成路径或文件名,请配置output---------
`);
});
archive.pipe(output);
for (i of target) {
archive.directory(i, false);
}
archive.finalize();
配置后打包的产物是在根目录下新增了是 zip
文件夹:
注意:
vue.config.js
文件中配置的打包输出文件名(默认dist
)需要与archiver.config.js
配置的输出文件名保持一致。 如果不一致,则需要更改。
3. 打包命令配置
在package.json
文件里配置
json
"scripts": {
"serve": "vue-cli-service serve",
"dev": "vue-cli-service serve --mode development",
"build:test": "vue-cli-service build --mode test && cross-env VUE_APP_NODE_ENV=development npm run zip",
"build:prod": "vue-cli-service build --mode production && cross-env VUE_APP_NODE_ENV=production npm run zip",
"lint": "vue-cli-service lint",
"zip": "node archiver.config.js"
},
4. 打包产物
执行npm run build:test
,可打包测试环境代码
新增的压缩文件如下:
-
测试环境:
-
生产环境: