写一个批量打包业务代码的node脚本插件

348 阅读3分钟

概述

由于公司内部使用微前端技术,将各个子项目拆分成独立的项目分发到不同项目组进行开发,我自己的小组涉及到每次线上升级项目的时候,需要手动打包的项目达到了10个以上,每个项目手动拉取远程代码,然后安装依赖和执行打包命令的方式实在太慢太痛苦,而且很折磨人,这里根据现在的痛点,自己写了写一个node脚本可以根据配置拉取,合并,打包git项目代码等。

npm仓库地址

www.npmjs.com/package/gni…

支持功能

  • 动态 node 版本
  • 打包输入到本机任意目录
  • 动态根据分支或者 tag 打包
  • 支持合并分支、tag
  • 可配置并发执行或者链式执行
  • 拉取远程代码在打包后不占用本地磁盘空间,打包完成后自动清空工作空间
  • 支持串行或者并发打包(并发打包不支持缓存)
  • 支持可配置缓存打包文件或者清理工作空间(大大减少打包时间,同时缓存会占用一定的磁盘空间)
  • 支持可配置是否自动压缩替换打包后的项目

安装

新建一个项目目录
npm init -y
yarn add gnip-bundle-tool

使用

//导入包
const { start } = require("gnip-bundle-tool");
const path = require("path");

/**
 * @Description
 * @param { string }  gitUrl git项目克隆地址(https的地址)
 * @param { string }  branch 需要拉取的分支
 * @param { string }  tag 需要拉取的tag(tag和branch二者都存在则使用branch)
 * @param { boolean }  isBundleFile 打包后取文件夹还是压缩包
 * @param { boolean }  isClearCache 打包是否清理缓存文件
 * @param { string }  nodeVersion node版本,默认14.21.3
 * @param { string }  mergeBranch 拉取后需要合并的远程分支名注意(带origin/xxx)
 * @param { string }  mergeTag 拉取后需要合并的远程tag
 **/
// 项目映射(必改)
const gitProjectMap = {
  xxx: {
    gitUrl: "https://xxx.git",
    branch: "private/merge-test",
    nodeVersion: "",
    mergeBranch: "",
    isBundleFile: true,
    isClearCache: true,
  },
  git项目名: {
    gitUrl: "远程分支克隆地址",
    tag: "需要拉取的分支或者tag",
    nodeVersion: "node版本,默认14.2.3",
    mergeTag: "拉取后需要合并的远程tag",
  },
};
// 启动函数
start({
  gitProjectMap, //项目配置项
  suffixReg: /.tar.gz/, //最后项目打包后需要归并的文件后缀(公司项目为.tar.gz的压缩包)
  defaultNodeVersion: "14.21.3", //默认node版本
  outputFileName: "数据治理-3.10正式-test", //输出的文件名称
  compressType: "zip", //压缩包类型
  buildName: "build", //单个脚手架项目打包后的输入的文件名
  outputPutDir: path.resolve("D:\bundles"), //输入的项目目录(自行复制文件目录输出位置)
  workSpacesPath: path.resolve(__dirname, "./workspaces"), //工作空间路径(git clone 、打包的暂存区,打包完成输出后,会清空对应文件)
  isConcurrentExecute: false, //是否并发执行(默认串联执行),注意:并发执行效率更高,cpu占用资源更多,可能过多项目会出现主机卡死情况
  isClearWorkSpace: false, //是否需要清理工作空间(优先级高于单个项目配置的清理字段isClearCache)
  isZipBundleFile: false, //是否打包后压缩打包文件并且删除文件夹
});

注意事项

  • 使用 node 切换版本的需要提前下载 nvm 工具
  • 对应项目自己的 git 账户一定要有权限拉取
  • 依赖下载报错需自己检查日志处理
  • 并发执行,自己电脑的配置要够高才行,不然直接卡死机(慎用)
  • 并发执行的项目请确保 node 版本一致,不同 node 版本批量打包会出现环境冲突等问题,可多次分批次批量打包 node 版本相同的项目
  • 使用的 node 版本确保自己本地一定要有,不然直接报错
  • 工作空间最好不要和脚本文件同级,依赖下载和打包后,可能会出现文件缓存清理不干净的问题出现