美文网首页
NPM模块的TAG管理

NPM模块的TAG管理

作者: 炜_f0e4 | 来源:发表于2019-01-25 10:43 被阅读0次

    npm version patch
    该命令会使小版本号+1 并且帮你执行 git add commit 并且会用新的版本号在本地打一个tag 通过git tag查看本地tag列表执行这个命令之前必须保证 项目已经 git add commit不然会报错

    npm version prerelease
    该命令同上 唯一区别就是 他不是小版本+1,他会再小版本号后面追加一个版本号

    npm publish --tag tyc@1.0.12-1
    运行了上面其中一个之后 可以运行这个命令发布这个tag了 (这里发布之后 用户下载是不会下到这个版本的 触发用户指定版本)

    npm info
    可以用该命令查看当前脚手架的版本信息

    # 重点看这一块 latest 是用户默认下载的
    # tyc@1.0.12-2: 1.0.12-2 这一个是测试版本 除非用户指定版本号才能下的到
    dist-tags:
    latest: 1.0.12-0
    n-n-n-n@1.0.2-1: 1.0.12-0
    tyc@1.0.12-1: 1.0.12-1
    tyc@1.0.12-2: 1.0.12-2
    

    如何才能将 tyc@1.0.12-2: 1.0.12-2 这个上线呢?
    当我们的prerelease版本已经稳定了,重新设置为稳定版本
    npm dist-tag add tyc@1.0.12-2 latest 可以通过该命令 将开发的 1.0.12-2 版本变成正式版本 这样用户那边 npm i tyc 就会下载的是 1.0.12-2 而不再是 1.0.12-0

    总结

    npm version patch``npm version prerelease这两个其实没什么用 辅助作用 如果你想发布一个 beta版 重点在于npm publish --tag tyc@1.0.12-1 发布一个tag包 既不影响用户那边 你又可以测试新功能,测试好了可以 npm dist-tag add tyc@1.0.12-2 latest 切换到正式版

    npm dist-tag ls n-n-n-n 和 npm dist-tag ls 查看当前包dist-tag信息

    在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

    相关文章

      网友评论

          本文标题:NPM模块的TAG管理

          本文链接:https://www.haomeiwen.com/subject/mhfmjqtx.html