NPM


2019-1-7 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"
}
1
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
1

repository

包的仓库地址

keywords

包的关键字,其他开发者在 npmjs.org 查看你的包时以标签形式展示

author

包作者
示例: Your Name email@example.com (http://example.com)

license

代码许可标识,默认 ISC

bugs

使用过程中遇到 bug 时,提交或者解决问题的地址

bin

配置全局安装包执行的命令,及执行文件地址

{
  "xxx": "index.js"
}
1
2
3

全局安装后,可以在命令行 xxx 执行到对应文件

dependencies

生产环境需要的依赖包

提示:仅限配置生产环境需要的依赖, 开发&测试环境需要的依赖包配置到 devDependencies

devDependencies

测试环境用到的依赖包

modules

应考虑兼容到 CommonJS AMD CMD 以及 浏览器 直接引入使用

测试

必须包含所有功能的测试在 test 文件夹中

DEMO

README.md

为了帮助其他开发人员, 使用你的包时有更好的体验, 推荐在根目录添加 readme.md 描述如何安装、配置和使用你的包

发布

发布时需设置 名称 个人发布使用自己姓名全拼做域名@<name>

# 设置包域名为姓名全拼
npm init --scope=@zhangkangxin
1
2

项目组发布以项目组名 @<project-name> 作为域名

# 设置包域名为项目名称 @arch
npm init --scope=@arch
1
2

非项目组的包名应以部门 @<depart-name> 作为域名

# 设置包域名为部门 @financial
npm init --scope=@financial
1
2

执行发布

npm publish --access public
1

开发人员应避免包中含敏感信息。例: npm 账号密码、私有 keys 、私人资料、信用卡信息

依赖包更新与检测

定期使用 npm audit 命令检测 package.json 依赖包是否有漏洞

npm 私服搭建

Verdaccio

Verdaccio是一个简单的,零配置所需的本地私有npm注册表。不需要整个数据库就可以开始使用!Verdaccio开箱即用,拥有自己的小型数据库,能够代理其他注册表(例如npmjs.org),一路缓存下载的模块。

搭建过程

安装verdaccio

$ npm install --global verdaccio
1

配置文件

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
1
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    #查看是否添加成功
1
2
3
4
5

修改完了配置,到verdaccio目录下通过$ verdaccio -c config.yaml更新一下

启动

$ verdaccio
1

pm2守护verdaccio进程

利用第一种方法虽然可以正常启动和使用verdaccio,但不建议用这种方式启动verdaccio,我们可以用pm2来使用pm2对verdaccio进程进行托管启动。
安装pm2并使用pm2启动verdaccio,使用pm2托管的进程可以保证进程永远是活着的,尝试通过kill -9去杀verdaccio的进程发现杀了之后又自动启起来。推荐使用此种方式启动verdaccio. 安装pm2

npm install -g pm2 --unsafe-perm
1

使用pm2启动verdaccio

pm2 start verdaccio
1

查看pm2 守护下的进程verdaccio的实时日志

pm2 show verdaccio  
1

通过这个命令我们可以从下图中看到所有verdaccio的所有信息,打开 out log path查看进程输出日志,出现错误时候也可以打开error log来查看错误日志。

创建用户

npm adduser --registry /* ip */
1

然后我们在ip地址上面直接点Login就可以登陆了 这里,如果我们已经装了nrm ,可以简便上面这句操作:我们直接利用nrm把镜像源切换到我们的ip/npm上面,然后$ npm adduser就可以了

与私服连接

npm set registry http://192.168.XX.50:4873 
1

安装nrm

nrm是 npm registry 管理工具, 能够查看和切换当前使用的registry。不安装也可以,安装会更高效

npm install -g nrm
1

添加私服地址到nrm管理工具

nrm add kingyinliang http://192.168.XX.50:4873    #添加本地私服地址
1

这里的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/
1
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/
1
2
3
4
5
6
7
8
9
10

发布包

npm publish           #已经切换到我们私服地址的情况下
npm publish --registry http://192.168.XX.50:4873   #未切换到我们的私服时,直接加后缀可以发布到私服上。
1
2

同步项目所需要的包到verdaccio中

npm.jpg

Last Updated: 2019-8-14 6:29:41 PM