npm是一个十分好用的包管理工具,使用在十分多的我的项目里。当咱们须要依赖包时,npm会从镜像中下载到本地(默认是 https://registry.npmjs.org/ ,国内应该有不少同学会将这个镜像改成淘宝的)。

然而当咱们在内网环境开发时,没有内部网络,这就会造成无依赖可用,此时咱们就须要搭建一个内网的镜像,将须要的依赖放在这个镜像上。

这里咱们应用Nexus3来创立私库。

筹备一 创立Nexus3的仓库

  1. 首先创立一个仓库
  2. 接下来抉择npm(hosted),咱们没有外网,所以不创立代理和分组
  3. 而后填写一个名字就能够,其余的临时能够不思考,如果有同学创立了本人的Blob,则选为本人创立的Blob即可

筹备二 下载tgz包

  1. 首先,装置 node-tgz-downloader,用来下载依赖tgz文件

    npm install node-tgz-downloader -g
  2. 关上咱们的node工程,将须要的依赖都装置到本地(如果曾经装置,或曾经生成package-lock.json文件,则跳到下一步),执行命令

    npm install

    这里特地留神,尽可能应用https://registry.npmjs.org/这个镜像,淘宝尽管快,然而出问题了真是不晓得怎么解决。查看以后应用的镜像命令

    npm config get registry

    不晓得怎么批改镜像地址的同学能够应用上面这个命令

    npm install --registry=https://registry.npmjs.org/

    或者在工程根目录下新建一个.npmrc文件,手动定义镜像地址

  3. 生成 package-lock.json文件后,执行命令

    download-tgz package-lock package-lock.json

    这个命令会依据package-lock.json文件,下载所须要的依赖包tgz,如果存在下载失败的状况,则多执行几次命令,直到所有依赖都下载实现。

  4. 下载的tgz文件会在我的项目根目录/tarballs下,这个时候基本上就实现了tgz的下载。

筹备三 公布tgz到nexus

  1. 为了跟上面的脚本放弃始终,将所有tgz都放到一个目录下,新建tgz文件夹,并在tarballs文件夹下执行上面的shell命令,这里用shell脚本找出tarballs文件夹下所有tgz包并复制到tgz文件夹下(这里都放到一个目录下是因为当有多个工程时,依赖包可能会反复,公布时tgz有反复则会报错,所以是一个去重的操作)。

    find . -name '*.tgz' -exec cp -f {} ../tgz \;
  2. 创立公布脚本(单个工程时可利用find命令改变上面的脚本,省去第一步)

    #!/bin/bashPACKAGE_PATH=./tgzREPOSITORY=http://ip:port/repository/dataservice-web/npm login --registry=$REPOSITORYfor file in $PACKAGE_PATH/*.tgz; do npm publish --registry=$REPOSITORYdone
  3. 执行公布脚本,会要求填写username,password以及email,填写完就会开始公布;这个时候就十分慢了,急躁期待(我这里6百个tgz,用时大略十分钟)

完结

因为没找到应用Nexus3的API上传依赖的例子,所以应用了npm的发布命令,导致上传比较慢,并且对反复的依赖不能做主动解决。如果有晓得的同学能够留言讲一下。

如果上传完之后,还存在个别包不存在的状况,那就能够通过手动上传的形式,利用Nexus3的界面上传即可。