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命令;
为了不丢错误输出,所以我在循环中加入的日志写入;
码云仓库地址:https://gitee.com/git_zs/output_tgz_npm.git