NPM
NPM 包管理规范
为了方便管理和维护组织内越来越多的 npm 公用包,以及良好的生态环境,特制定此规范
package.json
package.json
基础模板
{
"name": "my_package",
"description": "awsome package",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/ashleygwilliams/my_package.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/ashleygwilliams/my_package/issues"
},
"homepage": "https://github.com/ashleygwilliams/my_package"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
name
必须使用小写,多词之间使用 连字符 - 间隔
并且必须满足以下条件
- 唯一的
- 描述性质的
- 非攻击性词汇
- 非商标类词汇
- 非别人拥有的名字
- 非已有包名的简写
- 非已有包名的类似名字混搅
示例:uploader
, milk-finder
, one-to-three
description
包的简单描述
version
包版本号,默认为 1.0.0
- 1.0.1 通常为 bug fix
- 1.1.0 新的功能,但向后兼容
- 2.0.0 新的功能,不再向后兼容
main
默认入口,默认为根目录 index.js
全局包需要在 index.js 的第一行添加 #!/usr/bin/env node 否则 windows 系统中可能不会以 nodejs 去执行入口
scripts
快捷的脚本地址
npm run test
repository
包的仓库地址
keywords
包的关键字,其他开发者在 npmjs.org
查看你的包时以标签形式展示
author
包作者
示例: Your Name email@example.com (http://example.com)
license
代码许可标识,默认 ISC
bugs
使用过程中遇到 bug 时,提交或者解决问题的地址
bin
配置全局安装包执行的命令,及执行文件地址
{
"xxx": "index.js"
}
2
3
全局安装后,可以在命令行 xxx 执行到对应文件
dependencies
生产环境需要的依赖包
提示:仅限配置生产环境需要的依赖, 开发&测试环境需要的依赖包配置到
devDependencies
devDependencies
测试环境用到的依赖包
modules
应考虑兼容到 CommonJS
AMD
CMD
以及 浏览器
直接引入使用
测试
必须包含所有功能的测试在 test
文件夹中
DEMO
README.md
为了帮助其他开发人员, 使用你的包时有更好的体验, 推荐在根目录添加 readme.md
描述如何安装、配置和使用你的包
发布
发布时需设置 域
名称
个人发布使用自己姓名全拼做域名@<name>
# 设置包域名为姓名全拼
npm init --scope=@zhangkangxin
2
项目组发布以项目组名 @<project-name>
作为域名
# 设置包域名为项目名称 @arch
npm init --scope=@arch
2
非项目组的包名应以部门 @<depart-name>
作为域名
# 设置包域名为部门 @financial
npm init --scope=@financial
2
执行发布
npm publish --access public
开发人员应避免包中含敏感信息。例: npm 账号密码、私有 keys 、私人资料、信用卡信息
依赖包更新与检测
定期使用 npm audit
命令检测 package.json
依赖包是否有漏洞
npm 私服搭建
Verdaccio
Verdaccio是一个简单的,零配置所需的本地私有npm注册表。不需要整个数据库就可以开始使用!Verdaccio开箱即用,拥有自己的小型数据库,能够代理其他注册表(例如npmjs.org),一路缓存下载的模块。
搭建过程
安装verdaccio
$ npm install --global verdaccio
配置文件
verdaccio 的特点是,你在哪个目录运行,它的就会在对应的目录下创建自己的文件。目录下默认有两个文件:config.yaml和storage,htpasswd 是添加用户之后自动创建的;
由于第一次启动默认的config.xml文件是从原始文件default.yaml拷贝而来,可先修改verdaccio 原始的default.yaml。
地址:verdaccio 安装目录/conf/ default.yaml。
打开默认启动的config.yaml文件。
#设置NPM包的存放目录
storage: ./storage
#配置WEB UI界面
web :
title : ‘搭建私有NPM’
#logo : logo.png
#设置用户验证的文件。
auth:
htpasswd:
file: ./htpasswd
max_users: 1000 #默认为1000,改为-1,禁止注册
#设置其它的npm注册源(registry)
uplinks:
npmjs:
url: https://registry.npmjs.org/
#配置权限管理
packages:
‘@/’:
#表示哪一类用户可以对匹配的项目进行安装 【$all 表示所有人都可以执行对应的操作,$authenticated 表示只有通过验证的人可以执行对应操作,$anonymous 表示只有匿名者可以进行对应操作(通常无用)】
access: $all
#表示哪一类用户可以对匹配的项目进行发布
publish: $authenticated
‘*’:
#表示哪一类用户可以对匹配的项目进行安装
access: $all
#表示哪一类用户可以对匹配的项目进行发布
publish: $authenticated
# 如果一个npm包不存在,它会去询问设置的代理。
proxy: npmjs
#日志输出设置
logs:
-{type: stdout, format: pretty, level: http}
#-{type: file, path: verdaccio.log, level: info}
#修改监听的端口
listen: 0.0.0.0:4873
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
firewall-cmd --state # 先查看防火墙状态,
service firewalld start # 开启防火墙:
firewall-cmd --zone=public --add-port=4873/tcp –permanent #开放4873端口
firewall-cmd --reload #重新载入
firewall-cmd --zone=public --query-port=4873/tcp #查看是否添加成功
2
3
4
5
修改完了配置,到verdaccio目录下通过$ verdaccio -c config.yaml更新一下
启动
$ verdaccio
pm2守护verdaccio进程
利用第一种方法虽然可以正常启动和使用verdaccio,但不建议用这种方式启动verdaccio,我们可以用pm2来使用pm2对verdaccio进程进行托管启动。
安装pm2并使用pm2启动verdaccio,使用pm2托管的进程可以保证进程永远是活着的,尝试通过kill -9去杀verdaccio的进程发现杀了之后又自动启起来。推荐使用此种方式启动verdaccio.
安装pm2
npm install -g pm2 --unsafe-perm
使用pm2启动verdaccio
pm2 start verdaccio
查看pm2 守护下的进程verdaccio的实时日志
pm2 show verdaccio
通过这个命令我们可以从下图中看到所有verdaccio的所有信息,打开 out log path查看进程输出日志,出现错误时候也可以打开error log来查看错误日志。
创建用户
npm adduser --registry /* ip */
然后我们在ip地址上面直接点Login就可以登陆了
这里,如果我们已经装了nrm ,可以简便上面这句操作:我们直接利用nrm把镜像源切换到我们的ip/npm
上面,然后$ npm adduser
就可以了
与私服连接
npm set registry http://192.168.XX.50:4873
安装nrm
nrm是 npm registry 管理工具, 能够查看和切换当前使用的registry。不安装也可以,安装会更高效
npm install -g nrm
添加私服地址到nrm管理工具
nrm add kingyinliang http://192.168.XX.50:4873 #添加本地私服地址
这里的kingyinliang是我们给自己的私服地址起的别名,为了切换和使用方便。
将npm包的下载地址改到kingyinliang的私服。
nrm use kingyinliang verb config Skipping project config: C:\Users\kingyinliang/.npmrc. (matches userconfig)
Registry has been set to: http://192.168.XX.50:4873/
2
使用nrm ls可查到我们可以使用的所有镜像源地址,* 后面是当前使用的,如果我们不想从私服上下载包,就可以用上一步骤的nrm use命令,use其它的地址,将下载地址改到别的服务器。
C:\Users\Hepburn Yang>nrm ls
npm ---- https://registry.npmjs.org/
cnpm --- http://r.cnpmjs.org/
taobao - https://registry.npm.taobao.org/
nj ----- https://registry.nodejitsu.com/
rednpm - http://registry.mirror.cqupt.edu.cn/
npmMirror https://skimdb.npmjs.com/registry/
edunpm - http://registry.enpmjs.org/
* kingyinliang --- http://192.168.XX.50:4873/
2
3
4
5
6
7
8
9
10
发布包
npm publish #已经切换到我们私服地址的情况下
npm publish --registry http://192.168.XX.50:4873 #未切换到我们的私服时,直接加后缀可以发布到私服上。
2
同步项目所需要的包到verdaccio中
← 发布规范