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

概述

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

仓库地址

github.com/Dreamy-deng...

支持功能

  • 动态 node 版本
  • 打包输入到本机任意目录
  • 动态根据分支或者 tag 打包
  • 支持合并分支、tag
  • 可配置并发执行或者链式执行
  • 拉取远程代码在打包后不占用本地磁盘空间,打包完成后自动清空工作空间
  • 支持串行或者并发打包

安装

js 复制代码
yarn add gnip-bundle-tool

使用

php 复制代码
//导入包
const { start } = require("gnip-bundle-tool");
const path = require("path");

// 需要打包项目的git分支,git地址,node版本映射信息
/**
 * @Description
 * @Author dengping
 * @Date 2023/12/22 13:48:36
 * @param { string }  gitUrl git项目克隆地址
 * @param { string }  branchOrTag 需要拉取的分支或者tag
 * @param { string }  nodeVersion node版本,默认14.21.3
 * @param { string }  mergeBranch 拉取后需要合并的远程分支名注意(带origin/xxx)
 * @param { string }  mergeTag 拉取后需要合并的远程tag
 **/
// 资产项目(必改)
const gitProjectMap = {
  "dsep-web-home-page": {
    gitUrl:
      "https://git.cisdigital.cn/gzjg/dsep/frontend/desp-web-plus/dsep-web-home-page.git",
    branchOrTag: "master",
    nodeVersion: "",
  },
  "fe-cisdigital-data-standard": {
    gitUrl:
      "https:git.cisdigital.cn/qt/qbee/fe/fe-qbee/fe-cisdigital-data-standard.git",
    branchOrTag: "release-3.7.0-11_30-20231218",
    nodeVersion: "",
  },
  "fe-cisdigital-assets-config-management": {
    gitUrl:
      "https:git.cisdigital.cn/qt/qbee/fe/fe-qbee/fe-cisdigital-assets-config-management.git",
    branchOrTag: "release-3.7.0-11_30-20231218",
    nodeVersion: "16.14.0",
  },
  "fe-qbee-layout": {
    gitUrl: "https:git.cisdigital.cn/qt/qbee/fe/fe-qbee/fe-qbee-layout.git",
    branchOrTag: "private/merge-test",
    nodeVersion: "",
    mergeBranch: "",
    //mergeTag: "release_3.1.8.0-2_20231218",
  },
};
// 默认node版本(必改)
const defaultNodeVersion = "14.21.3";
// 输入的项目目录,自行复制文件目录输出位置(必改)
const outputPutDir = path.resolve("C:\Users\Y00043\Desktop");
/* 
--------以下配置可根据自身项目条件更改
 */
//最后项目打包后需要归并的文件后缀(公司项目为.tar.gz的压缩包)
const suffixReg = /.tar.gz/;
// 输入的文件名称
const outputFileName = "dsep";
// 输入压缩包类型
const compressType = "zip";
// 单个脚手架项目打包后的输入的文件名
const buildName = "build";
//工作空间路径(git clone 、打包的暂存区,打包完成输出后,会清空对应文件)
const workSpacesPath = path.resolve(__dirname, "../../workspaces");
// 项目名映射
const projectList = Object.keys(gitProjectMap);
// 是否并发执行(默认串联执行),注意:并发执行效率更高,cpu占用资源更多,可能过多项目会出现主机卡死情况(node版本不同可能存在问题)
const isConcurrentExecute = false;
start({
  projectList,
  suffixReg,
  outputPutDir,
  outputFileName,
  compressType,
  buildName,
  workSpacesPath,
  gitProjectMap,
  isConcurrentExecute,
  defaultNodeVersion,
});

注意事项

  • 使用 node 切换版本的需要提前下载 nvm 工具
  • 对应项目自己的 git 账户一定要有权限拉取
  • 依赖下载报错需自己检查日志处理
  • 并发执行,自己电脑的配置要够高才行,不然直接卡死机(慎用)
相关推荐
小蜜蜂嗡嗡2 小时前
【flutter对屏幕底部有手势区域(如:一条横杠)导致出现重叠遮挡】
前端·javascript·flutter
伍哥的传说3 小时前
Vue 3 useModel vs defineModel:选择正确的双向绑定方案
前端·javascript·vue.js·definemodel对比·usemodel教程·vue3.4新特性·vue双向绑定
胡gh8 小时前
页面卡成PPT?重排重绘惹的祸!依旧性能优化
前端·javascript·面试
胡gh8 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
言兴8 小时前
# 深度解析 ECharts:从零到一构建企业级数据可视化看板
前端·javascript·面试
山有木兮木有枝_8 小时前
TailWind CSS
前端·css·postcss
烛阴9 小时前
TypeScript 的“读心术”:让类型在代码中“流动”起来
前端·javascript·typescript
杨荧9 小时前
基于Python的农作物病虫害防治网站 Python+Django+Vue.js
大数据·前端·vue.js·爬虫·python
Moment10 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
程序视点11 小时前
Escrcpy 3.0投屏控制软件使用教程:无线/有线连接+虚拟显示功能详解
前端·后端