kekobin / blog

blog

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

架构之本地npm服务搭建

kekobin opened this issue · 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