NPM模块的TAG管理
发布于 11 年前 作者 fish 14335 次浏览 最后一次编辑是 8 年前

在npm里发布一个模块还是很容易的, 在模块目录里 npm publish 就发布好了一个模块, 这个时候模块的版本就是你package.json里的版本号(当然模块必须是没有被占位的,名字和版本都没有被占据的才可以)。

但是某些情况,我们都会发布一个alpha版本、beta版本的模块,比如connect:

# connect versions
     '3.0.0-rc.1': '2014-03-06T20:38:01.961Z',
     '2.14.2': '2014-03-12T01:56:42.090Z',
     '2.14.3': '2014-03-18T15:08:21.115Z',
     '2.14.4': '2014-04-07T20:57:11.875Z',
     '2.14.5': '2014-04-24T19:33:15.518Z',
     '2.15.0': '2014-05-05T04:08:51.417Z',
     '3.0.0-rc.2': '2014-05-05T04:30:08.312Z',

当模块非常受欢迎时,这个rc版本可以像很多软件的nightbuild,发布给尝鲜的小白鼠们先测试, 尤其是命令行工具类型的package。 但是如果直接 npm publish , 默认会更新tag latest对应的版本号,这可能会误伤了很多 package.json dependencies 写成*的用户, 怎么避免这种情况呢?

先看看 npm install

npm install <PackageName>@<?>

<?> 可以是 <tag>, 可以是具体的<versionNum>

npm install fishbar 实际安装的是 fishbar模块的 latest tag指定的版本,看看connect的tag信息npm info fishbar , 输出的信息中有:

{ name: 'fishbar',
  description: 'test npm tag',
  'dist-tags': 
   { latest: '0.0.1',
     nightbuild: '0.0.2'},
   .........

dist-tags 里列出模块的所有tag, 所以可以这么解读, 当前稳定版本是 0.0.1, rc版本是0.0.1-pre, 还有一个测试版本。

用户在安装的时候 npm install fishbar 获取到的是0.0.1 版本(功能稳定), 而小白鼠用户npm install fishbar[@nightbuild](/user/nightbuild) 得到的就是一个最新测试版(不稳定但功能更强大)。

一旦0.0.2稳定之后,更新latest tag的指向

npm tag fishbar[@0](/user/0).0.2 latest

v0.0.2就上线了,无需再重新更新一个版本号。

而一旦发现bug,也可以通过上面的命令回退latest tag, 方便灵活,尤其是在npm unpublish 无法删除版本的时候,修复bug又没那么快的时候,赶紧回退latest以免干扰到模块的用户。

参考:

https://www.npmjs.org/doc/cli/npm-publish.html https://www.npmjs.org/doc/cli/npm-tag.html https://www.npmjs.org/doc/cli/npm-install.html

3 回复

补充一下这个用法:npm publish <folder> [–tag <tag>]

比如 npm publish fishbar --tag nightbuild。

@alsotang 借地方找你重新推一下代码:nfmcg,旺旺找我

今天遇到类似的一个问题,翻了很多帖子,都没找到答案。竟然挖坟挖到答案了

回到顶部