npm是一个非常好用的包管理工具,运用在非常多的项目里。当我们需要依赖包时,npm会从镜像中下载到本地(默认是 https://registry.npmjs.org/ ,国内应该有不少同学会将这个镜像改成淘宝的)。
但是当我们在内网环境开发时,没有外网,不能连接到公网镜像,此时我们就需要搭建一个内网的镜像,将需要的依赖放在这个镜像上。
这里我们使用Nexus3来创建私库。
准备一 创建Nexus3的仓库
- 首先创建一个仓库
- 接下来选择npm(hosted),我们没有外网,所以不创建代理和分组
- 然后填写一个名字就可以,其他的暂时可以不考虑,如果有同学创建了自己的Blob,则选为自己创建的Blob即可
准备二 下载tgz包
首先,安装 node-tgz-downloader,用来下载依赖tgz文件(如果有
npm-pack-all
也可以,这里以node-tgz-downloader
为例)npm install node-tgz-downloader -g
打开我们的node工程,将需要的依赖都安装到本地(如果已经安装,或已经生成package-lock.json文件,则跳到下一步),执行命令
npm install
这里特别注意,尽可能使用https://registry.npmjs.org/这个镜像,淘宝虽然快,但是出问题了真是不知道怎么解决。检查当前使用的镜像命令
npm config get registry
不知道怎么修改镜像地址的同学可以使用下面这个命令
npm install --registry=https://registry.npmjs.org/
或者在工程根目录下新建一个
.npmrc
文件,手动定义镜像地址生成 package-lock.json文件后,执行命令
download-tgz package-lock package-lock.json
这个命令会根据package-lock.json文件,下载所需要的依赖包tgz,如果存在下载失败的情况,则多执行几次命令,直到所有依赖都下载完成。
- 下载的tgz文件会在项目根目录/tarballs下,这个时候基本上就完成了tgz的下载。
准备三 发布tgz到nexus
为了跟下面的脚本保持一直,将所有tgz都放到一个目录下,新建tgz文件夹,并在tarballs文件夹下执行下面的shell命令,这里用shell脚本找出tarballs文件夹下所有tgz包并复制到tgz文件夹下(这里都放到一个目录下是因为当有多个工程时,依赖包可能会重复,发布时tgz有重复则会报错,所以是一个去重的操作)。
find . -name '*.tgz' -exec cp -f {} ../tgz \;
创建发布脚本(单个工程时可利用find命令改动下面的脚本,省去第一步)
#!/bin/bash PACKAGE_PATH=./tgz REPOSITORY=http://ip:port/repository/dataservice-web/ npm login --registry=$REPOSITORY for file in $PACKAGE_PATH/*.tgz; do npm publish --registry=$REPOSITORY done
- 执行发布脚本,会要求填写username,password以及email,填写完就会开始发布;这个时候就非常慢了,耐心等待(我这里6百个tgz,用时大概十分钟)
结束
由于没找到使用Nexus3的API上传依赖的例子,所以使用了npm的发布命令,导致上传比较慢,并且对重复的依赖不能做自动处理。如果有知道的同学可以留言讲一下。
如果上传完之后,还存在个别包不存在的情况,那就可以通过手动上传的方式,利用Nexus3的界面上传即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。