美文网首页
pkg semver 详解

pkg semver 详解

作者: 一只重拾梦想的小水 | 来源:发表于2019-01-14 14:08 被阅读0次

    一、最佳实践:

    总结起来,在 2018 年 (node 9.8.0, npm 5.7.1) 时代,我认为的依赖版本管理应当是:

    使用 npm:>=5.1版本, 保持package-lock.json文件默认开启配置

    初始化:第一作者初始化项目时使用npm install <package>安装依赖包, 默认保存^X.Y.Z依赖 range 到 package.json中; 提交package.json,package-lock.json,不要提交node_modules目录

    初始化:项目成员首次checkout/clone 项目代码后,执行一次npm install安装依赖包

    不要手动修改 package-lock.json

    升级依赖包:

    升级小版本: 本地执行npm update升级到新的小版本

    升级大版本: 本地执行npm install <package-name>@<version>升级到新的大版本

    也可手动修改 package.json 中版本号为要升级的版本(大于现有版本号)并指定所需的 semver, 然后执行npm install

    本地验证升级后新版本无问题后,提交新的package.json,package-lock.json文件

    降级依赖包:

    正确:npm install <package-name>@<old-version>验证无问题后,提交package.json 和 package-lock.json 文件

    错误: 手动修改package.json中的版本号为更低版本的 semver, 这样修改并不会生效,因为再次执行npm install依然会安装package-lock.json中的锁定版本

    删除依赖包:

    Plan A:npm uninstall <package>并提交package.json和package-lock.json

    Plan B: 把要卸载的包从 package.json 中 dependencies 字段删除, 然后执行npm install并提交package.json和package-lock.json

    任何时候有人提交了 package.json, package-lock.json 更新后,团队其他成员应在 svn update/git pull 拉取更新后执行npm install脚本安装更新后的依赖包

    二、semver介绍:

    优先级:命令行>npm-shrinkwrap>lock>package.json

    (默认安装范围内最高的)

    1.0.0-2.0.0

    1.0.x

    ~1.0.0

    ^1.0.0

    caret difinition:

    ^major.minor.patchAllows changes that do not modify the left-most non-zero digit in the[major, minor, patch]tuple. In other words, this allows patch and minor updates for versions1.0.0and above, patch updates for versions0.X >=0.1.0, andnoupdates for versions0.0.X.

    举个例子:下面的列表是is-online例子中涉及到的版本号列表

    所以npm install pak@versionrange实际安装的版本,其实是范围内的最高版本

    如果@后的版本string有问题,直接报错,不会忽略去安装最新版

    @mtfe/koa-handlesensitive

    1.2.0-beta.1

    1.2.0-beta.2(上线截止

    1.2.0(新增

    1.2.0 >1.2.0-beta.x (因为-beta.x是prerelease版本)

    命令范围实际版本

    npm i @mtfe/koa-handlesensitive@^1.2.0-beta.1>=1.2.0-beta.1 <2.0.0

    截止上线之前范围为:

    1.2.0-beta.1

    1.2.0-beta.2

    1.2.0-beta.2

    package.json

    '@mtfe/koa-handlesensitive': '^1.2.0-beta.1'

    同上 同上

    在不冲突package的情况下,以package-lock 的版本为准(取交集)

    冲突时,以package为准,重写package-lock(由于package-lock失效,安装范围内最新版)

    不以“是否已安装过更高版本的@mtfe/koa-handlesensitive”的情况而转移,即安装过1.2.0,只要package与package-lock(1.2.0-beta.1)不冲突,就会安装更低的1.2.0-beta.1

    参考:

    https://docs.npmjs.com/misc/semver

    https://docs.npmjs.com/cli/install

    https://segmentfault.com/a/1190000013962514

    相关文章

      网友评论

          本文标题:pkg semver 详解

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