如何下载npm离线安装包

如何将本地nodejs库,放入到nexus的npm库

在代码工程目录使用 npm install 安装 package.json 所依赖的文件,并依赖下载到 node_modules 目录

1、通过 package.json安装依赖

例如:项目依赖文件 package.json, 将其拷贝有网的机器,执行 npm install安装依赖

{
  "name": "test",
  "version": "1.0.0"
  "dependencies": {
    "base64-js": "^1.5.1"
  },
  "devDependencies": {
    "css-loader": "^1.0.0"
  }
}

2、查看依赖组件

执行npm install后会多出一个node_modules目录和一个package-lock.json文件,且node_modules 目录每个依赖项的都有一个package.json

[root@x test]# tree -C -L 3
.
├── node_modules        # 已经下载完成的资源
│   ├── base64-js
│   │   ├── base64js.min.js
│   │   ├── index.d.ts
│   │   ├── index.js
│   │   ├── LICENSE
│   │   ├── package.json
│   │   └── README.md
│   ├── css-loader
│   │   ├── CHANGELOG.md
│   │   ├── index.js
│   │   ├── lib
│   │   ├── LICENSE
│   │   ├── locals.js
│   │   ├── package.json
│   │   └── README.md
│   ├── postcss-modules-values
│   │   ├── lib
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── src
│   │   └── test
│   ├── .....
├── package.json       # 项目所需要的各种模块配置信息
└── package-lock.json  # 锁定实际已安装的各个npm package的具体来源和版本号

进入node_modules/base64-js目录,查看package.json文件,有个_resolved 属性是一个URL地址,在浏览器地址栏输入url即可下载,包名为:name+version就是tgz的包名;

[root@x test]# cd node_modules/base64-js/
[root@x base64-js]# ls
base64js.min.js  index.d.ts  index.js  LICENSE  package.json  README.md
[root@x base64-js]# cat package.json
{
  "name": "base64-js",
  "version": "1.5.1",
  "devDependencies": {
    "babel-minify": "^0.5.1",
    "benchmark": "^2.1.4",
    "browserify": "^16.3.0",
    "standard": "*",
    "tape": "4.x"
  },
  "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
  "repository": {
    "type": "git",
    "url": "git://github.com/beatgammit/base64-js.git"
  },

  "...":"..."
}

查看package-lock.json文件,从resolved属性可以看到具体的下载地址

{
	"name": "test",
	"version": "1.0.0",
	"lockfileVersion": 1,
	"requires": true,
	"dependencies": {
		"base64-js": {
			"version": "1.5.1",
			"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
		},
		"css-loader": {
		  "version": "1.0.1",
		  "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz"
		},
		"postcss": {
			"version": "6.0.23",
			"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
			"dev": true,
			"requires": {
				"chalk": "^2.4.1",
				"source-map": "^0.6.1",
				"supports-color": "^5.4.0"
			},
			"dependencies": {
				"ansi-styles": {
					"version": "3.2.1",
					"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
					"dev": true,
					"requires": {
						"color-convert": "^1.9.0"
					}
				},...
			}
		},...
	}
}

3、下载npm的*.tgz包

最终想要是base64-js-1.5.1.tgz这种npm包,以便于发布到私有npm仓库;

** 总结几种方式:**

3.1 方式1: 通过 package.json_resolved属性链接下载

wget https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz

3.2 方式2: 通过 package-lock.jsonresolved属性链接下载

wget https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz

3.3 方式3:本地直接打包方式

将组件目录base64js.min.js 、 index.d.ts 、 index.js 、 LICENSE、 package.json 、 README.md等文件拷贝到package文件夹里,然后执行如下命令,命名采用 name-version.tgz

tar -zcvf base64-js-1.5.1.tgz package

4、批量下载

使用**node-tgz-downloader工具下载
https://github.com/Meir017/node-tgz-downloader `

download-tgz package-lock package-lock.json
# 下载完成,查看依赖下载目录 tarballs 以及npm tgz格式的依赖

当包下载量过大时会提示下载失败,有可能是镜像仓库服务端做了限制,后续有时间自行实现下载,也快将文件分割成小份尝试,减少一次频繁下载量,尚未测试

[failed download tgz] undefined https://registry.npmmirror.com/happypack/-/happypack-5.0.1.tgz 4
[failed download tgz] undefined https://registry.npmmirror.com/isurl/-/isurl-1.0.0.tgz 5
[failed download tgz] undefined https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz 4

自己写了一个python的下载脚本:
批量下载npm离线安装包

如何批量上传npm到Nexus3、持续待更新

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐