Node脚本快速同步CNPM项目内用到的依赖

本文介绍了一个使用Node脚本快速同步CNPM项目内依赖的方法,旨在解决公司内部私有仓未开启全量实时同步导致的包版本滞后问题。脚本能自动检索并更新所有项目的package.json,支持延时执行避免对内部CNPM造成压力,并能过滤已同步的包。只需一个Node环境和几个npm包,即可实现低成本的依赖更新。
摘要由CSDN通过智能技术生成

前言

还是为了解决之前的问题;
公司用CNPM作为内部私有仓,没有开启全量实时同步;
所以有些包会相对落后,所以常用同步上游就显得很重要了;


我想了想,每次都要手动去执行个别的包或者少量包的查询,操作太多了;
原理还是遵循CNPM更新机制,可以看看上篇帖子哈~

考虑的点

  • 设置一个根路径,会自动检索下所有项目的packaeg.json(不包含node_modules)
    • 包括所有git subtree或者monorepo的package.json
  • 支持延时执行,一瞬间太多要同步的,会把内部搭建cnpm搞崩;
  • 同步过,再下一个执行同步的会自动过滤.也就是同步过同名包不会再发同步请求


使用成本极低,一个Node环境装几个常用的npm包;

环境

  • Node 14.16.1

效果图

2021-05-02 02.09.35.gif

源码

const globby = require('globby');
const fs = require('fs');
const path = require('path');
const axios = require('axios');
const chalk = require('chalk');
const isPlainObject = require('lodash/isPlainObject');
const options = {
   
    baseRootPath: '/Users/linqunhe/Code/ONES',  // 检索的根路径
    ignorePackage: ['@ones-ai', '@ones'], // 忽略的包名,就是不管有木有缓存都不同步
    delayTime: 10, // 每一次执行延时的时间,随着执行次数会递增 , 2000 = 2s
    maxRetry: 3, // 整个逻辑,中间有错误重试机制最大次数
    privateHostName: 'xxxxx', // 内网部署CNPM的访问域名
}
let cachePkgList = [];
let retryCount = 0;
const baseDep = ['npm', 'pnpm', 'yarn','recoil','typescript','mobx','mobx-react','react','redux','vite'];

function onesNpmSyncUpdate(pkgList, isArray = false) {
   
    const syncReq = (pkgName) => {
   
        return axios.put(`${
     options.privateHostName}/sync/${
     pkgName}?sync_upstream=true`).then(res => {
   
            if (res && res.data && res.data.ok) {
   
                const data = [
                    {
   
                        '执行时间': new Date().toISOString(),
                        'NPM包名': pkgName,
                        '同步状态': res.data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值