Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

架构之本地npm服务搭建 #26

Open
kekobin opened this issue Sep 14, 2019 · 0 comments
Open

架构之本地npm服务搭建 #26

kekobin opened this issue Sep 14, 2019 · 0 comments

Comments

@kekobin
Copy link
Owner

kekobin commented Sep 14, 2019

前言

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant