npm 自动下包工具,内网自动批量下载tgz格式压缩包

643 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

npm 自动下包工具,内网自动批量下载tgz格式压缩包;

​ 在开发中有时会遇到比较保密的项目,因此不让使用外网,而当我们需要用到一些工具包时,就需要一个一个下载;

​ 这里是在近期的一次开发中遇到的问题,在开发中我使用了一些版本较高的依赖包,工程进行了一般一半,usb口因公司规定被封闭,然而我下载的包的版本比较高,于是就导致生产环境时无法使用jenkins自动打包;

​ 这里的解决方案就是首先统计出所有项目中依赖的包;

​ 因为拉取依赖的时候大部分版本都是向上兼容 所以下载最新的就可以(不带版本号)

​ 并写成json文件,类似这样

[    "bn.js",    "browserslist",    "caniuse-lite",    "electron-to-chromium",    "infer-owner",    "fs-minipass",    "minipass",    "minipass-pipeline",    "ssri",    "cache-loader",    "camel-case",    "upper-case",    "caniuse-lite",    "cssnano-util-same-parent",    "postcss-merge-longhand",    "cssnano-preset-default",    "css-loader",    "cross-spawn",    "semver",    "core-js-compat",    "copy-webpack-plugin",    "@types/q",    "wrap-ansi",    "string-width",    "mz"    ]

那么有了这个json文件,我们就可以使用nodejs来对它进行批量操作

let fs = require('fs')
let path = require('path')
let shell = require("shelljs")

// 结果输出目录
let outputDir = 'output'

// 所有npm包名
let pack = require("./init_serve.json")
shell.cd(outputDir)
let errArr = []
pack.forEach((item, index) => {
  shell.exec(`npm pack ${item}`, function (err) {
    if (err) {
      errArr.push(item)
      fs.writeFileSync("AA-log.txt", JSON.stringify(errArr))
      if (index == pack.length - 1) {
        console.log('下载完成')
      }
    }
  })
})

代码整体并不复杂,只是利用shelljs来执行npm pack命令;

为了不丢错误输出,所以我在循环中加入的日志写入;

码云仓库地址:gitee.com/git_zs/outp…