NPM包发布与管理
发布到官方NPM仓库
- 首先需要在NPM官网创建一个账号 
- 然后通过 - npm login登录账号
- 创建一个项目文件夹,通过 - npm init初始化,修改package.json里的项目信息,添加README.md.(已有项目的跳过)
- 通过 - npm publish发布(包名不能与现有的包重名或者非常接近)
使用nrm进行npm镜像源管理
发布包的时候,可能需要在各种npm库之间切换,通过nrm可以快速的实现这个需求。
安装
| 1 | yarn global add nrm | 
使用
| 1 | nrm ls #列出nrm管理的registry列表 | 
| 2 | nrm current #显示当前的registry名称 | 
| 3 | nrm use taobao #切换registry到taobao源,这个命令对yarn和npm同时生效 | 
| 4 | nrm add taobao https://registry.npm.taobao.org #添加一个名为taobao的源到列表 | 
| 5 | nrm del taobao #从列表中删除taobao源 | 
通过lerna进行包代码管理
lerna init
初始化
| 1 | mkdir lerna-repo && cd $_ | 
| 2 | npx lerna init | 
将会创建一个 lerna.json 配置文件和一个packages 文件夹,目录结构大概这样:
| 1 | lerna-repo/ | 
| 2 |   packages/ | 
| 3 |   package.json | 
| 4 |   lerna.json | 
在packages里添加module并通过npm init初始化
| 1 | mkdir packages/lerna-demo-core && cd packages/lerna-demo-core | 
| 2 | npm init | 
lerna bootstrap
通过lerna bootstrap处理依赖
lerna bootstrap会安装并处理package之间的依赖问题,比如packages/lerna-demo-module-a依赖了packages/lerna-demo-core,bootstrap会在lerna-demo-module-a的node_modules目录下建立指向lerna-demo-core的软链接。
| 1 | lerna add lerna-demo-core --scope=lerna-demo-module-a | 
此处有个活生生的例子
lerna publish
发布当前项目中的包。
如果有package发生变更的话,会让你选择一个新的版本号,然后就可以发布了。
这里有个不好的地方是,如果发布包失败,也无法重试发布,必须删除这个tag,然后回退版本变更的commit才可以重新发布。
版本管理方式
Lerna 提供两类管理项目的模式: Fixed 和 Independent.
- Fixed/Locked mode (default)
 Fixed模式下,项目通过单一的版本进行控制。版本号放在项目根目录下的lerna.json文件的version这个字段。当你执行 lerna publish,如果有文件更新,它将发布新的版本。
 babel项目采用的就是这种模式
- Independent mode (–independent)
 这种模式下,项目里的各个package独立维护自己的version,它将会忽略lerna.json中定义的version

