vue项目打包产物之archiver压缩打包zip文件

archiver是一个在nodejs中能跨平台实现打包功能的模块,通过 stream 的方式,可以打ziptar包。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,可打包测试环境代码

新增的压缩文件如下:

  • 测试环境:

  • 生产环境:

相关推荐
蜡台6 分钟前
vue.config.js 配置
前端·javascript·vue.js·webpack
qq_381338509 分钟前
微前端架构下的状态管理与通信机制深度解析:从 qiankun 源码到性能优化实战
前端·状态模式
han_18 分钟前
JavaScript设计模式(六):职责链模式实现与应用
前端·javascript·设计模式
网易云音乐技术团队18 分钟前
音乐应该“更好找”:我们为什么在 Agent 时代做了一个音乐 CLI
前端·人工智能
攀登的牵牛花21 分钟前
2.1w Star 的 pretext 火在哪?
前端·github
散步去海边30 分钟前
Pretext 初识——零 DOM 测量的文本布局引擎
前端
xw-busy-code32 分钟前
npm 包管理笔记整理
前端·笔记·npm
踩着两条虫44 分钟前
AI驱动的Vue3应用开发平台 深入探究(十六):扩展与定制之自定义组件与设计器面板
前端·vue.js·人工智能·开源·ai编程
棋鬼王1 小时前
Cesium(十) 动态修改白模颜色、白模渐变色、白模光圈特效、白模动态扫描光效、白模着色器
前端·javascript·vue.js·智慧城市·数字孪生·cesium
酉鬼女又兒1 小时前
零基础快速入门前端蓝桥杯Web备考:BOM与定时器核心知识点详解(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯