本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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…