架构之本地npm服务搭建
kekobin opened this issue · 0 comments
前言
1.为什么要搭建本地npm服务器?
在开发内部项目时,会有很多可复用的模块,而这些模块几乎都会牵涉到一些公司内部的业务逻辑,所以不方便对外开放,又存在需要在各个业务线流通复用的需求。所以搭建一个本地npm服务器是最有用的。
2.如果使用内部npm服务器,是否再需要用到外面的包需要切换?
并不需要,本地npm服务器搭建时,可以配置在本地服务器上找不到包时,会自动去外面哪个npm服务器上找。
搭建
使用verdaccio进行搭建。详细请参考官网
1.全局安装
npm install -g verdaccio
2.启动
# verdaccio or # pm2 start verdaccio(推荐)
3.配置
一般在如下地址进行配置修改.(启动后在终端就会看到配置地址)
/Users/[user]/.config/verdaccio/config.yaml
注意一点:配置文件中的 listen为"监听的端口 ,不配置这个,那就只能本机能访问"(一般 listen: 0.0.0.0:4873)
你看,很简单吧。默认访问链接: http://localhost:4873/
使用
1.设置当前npm服务只想的仓库地址
npm set registry http://localhost:4873
2.注册用户
npm adduser –registry http://localhost:4873
按照提示输入username 和 password,email
3.然后本地开发下载包,或者发布npm内部包,即可用:
npm install [--registry http://localhost:4873]
or
npm publish [--registry http://localhost:4873]
内部的包最好加上 @公司英文简称/报名, 如 @baidu/pkg-test,一方面是为了标识是内部包,另一方面防止跟外面的包名字冲突。
使用nrm来切换npm仓库
上面我们使用npm set的方式每次都需要输入registry的仓库地址,非常的麻烦。nrm是 npm registry 管理工具, 能够查看和切换当前使用的registry。使用它会让切换npm变得十分高效.
1.安装
npm install -g nrm
默认,像npm、cnpm等常用仓库已经添加进去了。
2.添加内部npm registry
nrm add [别名] http://localhost:4873
3.查看
输入 nrm ls 可看到类似如下内容:
npm ---- https://registry.npmjs.org/
cnpm --- http://r.cnpmjs.org/
taobao - https://registry.npm.taobao.org/
nj ----- https://registry.nodejitsu.com/
别名 ----- http://localhost:4873
4.切换内部registry
nrm use 别名
.npmrc文件,是npm的配置文件所在位置。默认可以通过npm config edit去编辑.
可以在项目根目录新建.npmrc文件去配置当前项目的npm配置.
registry=http://xxx:4873
mac下可以通过修改host配置自己的域名,然后使用pm2启动,这样下次就直接访问即可.
// mac修改hosts:桌面->前往->前往文件夹->/private/etc/hosts->配置一个host,如 127.0.0.1 npm.kebin.org, 然后就可以通过 http://npm.kebin.org:4873 进行访问了
npx
Node 自带 npm 模块,所以可以直接使用 npx 命令。万一不能用,就要手动安装一下。
npm install -g npx
介绍
npx 想要解决的主要问题,就是调用项目内部安装的模块。比如,项目内部安装了测试工具 Mocha。
npm install -D mocha
一般来说,调用 Mocha ,只能在项目脚本和 package.json 的scripts字段里面, 如果想在命令行下调用,必须像下面这样。
# 项目的根目录下执行
$ node-modules/.bin/mocha --version
npx 就是想解决这个问题,让项目内部安装的模块用起来更方便,只要像下面这样调用就行了。
$ npx mocha --version
npx 的原理很简单,就是运行的时候,会到node_modules/.bin路径和环境变量$PATH里面,检查命令是否存在。
#! /usr/bin/env在脚本中的作用
脚本用env启动的原因,是因为脚本解释器在linux中可能被安装于不同的目录,env可以在系统的PATH目录中查找。这种写法主要是为了让你的程序在不同的系统上都能适用,即可以获取到环境变量中对应的语言解释器。
所以node的脚手架开发(bin目录)及脚本开发,开头都需要加上这句,用于解释器解释运行脚本。
#! /usr/bin/env node
兼容安装方式
npm i --production --unsafe-perm=true --allow-root