NPM包发布与管理

发布到官方NPM仓库

  1. 首先需要在NPM官网创建一个账号

  2. 然后通过npm login登录账号

  3. 创建一个项目文件夹,通过npm init初始化,修改package.json里的项目信息,添加README.md.(已有项目的跳过)

  4. 通过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-corebootstrap会在lerna-demo-module-anode_modules目录下建立指向lerna-demo-core的软链接。

1
lerna add lerna-demo-core --scope=lerna-demo-module-a

此处有个活生生的例子

lerna publish

发布当前项目中的包。

如果有package发生变更的话,会让你选择一个新的版本号,然后就可以发布了。

这里有个不好的地方是,如果发布包失败,也无法重试发布,必须删除这个tag,然后回退版本变更的commit才可以重新发布。

版本管理方式

Lerna 提供两类管理项目的模式: Fixed 和 Independent.

  1. Fixed/Locked mode (default)
    Fixed模式下,项目通过单一的版本进行控制。版本号放在项目根目录下的lerna.json文件的version这个字段。当你执行 lerna publish,如果有文件更新,它将发布新的版本。
    babel项目采用的就是这种模式
  2. Independent mode (–independent)
    这种模式下,项目里的各个package独立维护自己的version,它将会忽略lerna.json中定义的version