npm私库的优点
- 使公司内部公共代码的复用更加方便
- 发布和下载npm包可以配置权限管理
- 速度比在直接在
npm下载更快,甚至是比淘宝源更快
本地搭建
本地搭建是为了测试使用,正式发布和下载包直接设置私库的镜像源地址即可
安装verdaccio
安装 verdaccio 前需要保证安装了 nodejs
# 打开命令行进行npm下载
npm install verdaccio -g
安装完成后输入 verdaccio 运行
在浏览器中输入http://localhost:4873/ 就可以进入页面,现在我们的私库地址就是http://localhost:4873/
配置 verdaccio
verdaccio 的配置信息都在 config.yaml 中,它的存放目录可以在 verdaccio 运行时的第一行看到
打开config.yaml在最后一行新增配置,用于支持远程访问:
listen: 0.0.0.0:4873
现在可以查看自己的 ip 地址,得到有 ip 地址的私库链接
win + r输入cmd回车,输入ipconfig查看ip地址
- 得到私库链接 172.xx.xx.xx:4873,可以用该链接打开页面
config.yaml具体内容如下:
# 存放软件所有软件包的目录
storage: ./storage
# 存放所有插件的目录
plugins: ./plugins
web:
# 网站Title
title: Verdaccio
# 禁用Gravatar头像
# gravatar: false
# 排序方式 asc|desc
# sort_packages: asc
# 是否启用暗黑模式
# darkMode: true
# logo地址
# logo: http://somedomain/somelogo.png
# favicon地址
# favicon: http://somedomain/favicon.ico | /path/favicon.ico
# i18n翻译配置
# i18n:
# 可用列表见:https://github.com/verdaccio/ui/tree/master/i18n/translations
# web: en-US
auth:
htpasswd:
file: ./htpasswd
# 最大注册用户数,默认为 "+inf".
# 可用通过设置为-1禁止注册
# max_users: 1000
# 上游npm库,这里可用设置为淘宝
uplinks:
taobao:
url: https://registry.npmjs.org/
packages:
# 作用域包
'@*/*':
# 允许所有人访问
access: $all
# 注册用户可访问
publish: $authenticated
# 注册用户可访问
unpublish: $authenticated
proxy: taobao
'**':
# 默认情况下所有用户 (包括未授权用户) 都可以查看和发布任意包
# 你可以指定 用户名/分组名 (取决于你使用什么授权插件,默认的授权插件是内置的 htpasswd)
# 访问权限有三个关键词: "$all", "$anonymous", "$authenticated"
# $all 表示不限制,任何人可访问;
# $anonymous 表示未注册用户可访问;
# $authenticated 表示只有注册用户可访问
access: $all
# 允许所有注册用户发布/撤销已发布的软件包
# (注意:默认情况下任何人都可以注册)
publish: $authenticated
unpublish: $authenticated
# 如果私有包服务不可用在本地,则会代理请求到'taobao'
proxy: taobao
# 您可以指定传入连接的HTTP /1.1服务器保持活动超时(以秒为单位)。
# 值为0会使http服务器的行为类似于8.0.0之前的Node.js版本,后者没有保持活动超时。
# 解决方法:通过给定的配置可以解决以下问题
server:
keepAliveTimeout: 60
# 中间件
middlewares:
audit:
enabled: true
# 日志设置
logs: { type: stdout, format: pretty, level: http }
# 开放远程访问,允许所有IP
listen: 0.0.0.0:4873
修改语言
# translate your registry, api i18n not available yet
i18n:
# list of the available translations https://github.com/verdaccio/ui/tree/master/i18n/translations
web: zh-CN
进程守护
运行成功后为了避免不小心将verdaccio的进程关掉,我们需要安装守护进程的工具:pm2 或 forever
如果你安装了
nvm进行node的版本控制,pm2可能运行不成功(状态会为stopped),出现这种情况请使用forever, 这里介绍这两种工具的安装
pm2
安装
npm install pm2 -g
运行 verdaccio
pm2 start verdaccio
status 为 online 就表示运行成功了
常用pm2命令
pm2 start app.js # 启动 app.js
pm2 stop app.js # 停止 <app_name|namespace|id|'all'|json_conf>
pm2 restart app.js # 重启 <app_name|namespace|id|'all'|json_conf>
pm2 delete app.js # 删除 <app_name|namespace|id|'all'|json_conf>
pm2 reload app.js # 重新加载 app.js
pm2 kill # 杀死所有进程
forever
安装
npm install forever -g
运行
cd C:\Users\Dell\AppData\Roaming\nvm\v14.15.0\node_modules\verdaccio\build\lib
forever start cli.js
如果觉得每次找目录麻烦,可以写一个脚本,每次启动运行脚本就可以了
cd /c/Users/Dell/AppData/Roaming/nvm/v14.15.0/node_modules/verdaccio/build/lib
forever start cli.js
exit
常用命令
forever list # 查看运行的应用
forever start cli.js # 启动脚本
forever stop cli.js # 停止脚本 Id|Uid|Pid|Index|Script
forever stopall # 停止所有脚本
forever restart cli.js # 重启脚本
forever restartall # 重启
本地使用
在本地使用很简单,只需要配置 npm 镜像源为私库地址就可以了
镜像源的设置
先来介绍一下有关镜像源设置的命令
镜像源的查看
npm get registry
如果你安装了 cnpm ,查看 cnpm的镜像源命令如下:
cnpm get registry
镜像源的修改
npm config set registry <url>
修改cnpm的镜像源:
cnpm config set registry <url>
安装nrm
nrm提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址
对于镜像源的切换,我们使用nrm更为方便
不过上述步骤在某些时候还是不够方便,我们来尝试使用nrm切换镜像源
在本地win + r 打开命令行工具进行安装
安装完成后输入 nrm ls 查看所有镜像源地址
这时候如果出现以下错误:
找到 cli.js并修改第17行为以下代码:
// const NRMRC = path.join(process.env.HOME, '.nrmrc');
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');
镜像源地址的添加
使用 nrm add 添加镜像源地址
// nrm add <registry> <url>
nrm add verdaccio http://172.56.xx.xxx:4873/
使用 nrm ls 查看所有的镜像源,验证是否添加成功
使用 verdaccio 镜像源 nrm use verdaccio
现在我们使用npm i就会优先从私库中下载,如果私库中没有相应的包,将会从其他镜像源下载(taobao、npm、yarn)
nrm常用命令
nrm ls // 查看可选源(带*号即为当前使用源)
nrm current // 查看当前使用源
nrm use <registry> // 切换源
nrm add <registry> <url> // 添加源
nrm del <registry> // 删除源
nrm test <registry> // 测试源速度
发布npm包
如果我们想发布自己写好的方法或组件,可以按照以下步骤进行发布
登录
添加用户
在真实环境中如果你没有权限添加用户,请联系管理员给你添加账号
首先我们要保证现在的镜像源地址为私库地址,切换完镜像源地址之后,我们可以使用npm adduser进行用户添加,需要依次输入用户名、密码、邮箱
现在我们可以使用 npm whoami 来查看现在登录的用户
我们还可以用该账号在私库页面进行登录
登录
如果你已经有一个账号了,可以使用如下命令进行登录:
npm login
然后依次输入账号、密码、邮箱
发布包
我们在本地写一个demo了解一下发布包的过程
npm init -y
使用 npm init -y 可以快速初始化项目,生成的 package.js 文件中包含了这个项目的详细信息
添加 index.js
发布
写好demo后进行发布:
npm publish
现在已经发布成功了
测试
我们来下载之前发布的包进行一下测试
- 安装包
npm i npm-test01
- 使用包
包信息的添加
如果我们不进行包信息的添加,那么在私库上就看不到关于包的信息,从而了解这个包的作用
添加READENE.md
READENE.md 是对包的说明,对这个包大致信息的一个介绍
现在创建一个README文件,然后发布
发布成功后我们可以看到如下效果
添加其他信息
{
"name": "npm-test",
"version": "1.3.0",
"description": "这是一个提供测试的包,只能测试", // 描述
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yang", // 作者
"contributors": [ // 贡献者
{
"name": "xxx",
"email": "xx1@xxx.com"
},
{
"name": "xx2",
"email": "xx2@xxx.com"
}
],
"dependencies": { // 核心依赖
"core-js": "^3.6.5",
"vue": "^2.6.11"
},
"devDependencies": { // 开发依赖
"@h3/jenkins-2-dingtalk": "^1.7.10"
},
"peerDependencies": { // 引用的关联依赖,不会强制安装,缺失会警告
"@h3/antd-vue": ">=1.4.10",
"lodash": ">=4.17.15",
"vue": ">=2.6.11",
"vue-template-compiler": ">=2.6.11"
},
"bugs": { // 对应code repo的issue
"url": "httxxxxk/issues",
"email":"cxxx"
},
"homepage": "http://www.baidu.com", // 跳转页面
"engines": { // 可以告知该报依赖什么node版本乃至什么版本的npm
"node": ">= 12.0.0",
"npm" : "^6.0.0"
},
"repository": { // code repo
"type": "git",
"url": "httpxxxx-hook.git"
},
"publishConfig": { // 指定发布域,就是指向私有仓
"registry": "http://xxx"
},
"license": "ISC" // 许可
}
其他链接
verdaccio verdaccio.org/
forever github.com/foreversd/f…
npm中文文档 www.npmjs.cn/
nodejs中文网 nodejs.cn/