首页 > 其他分享 >package.json中的版本号

package.json中的版本号

时间:2023-06-13 15:57:36浏览次数:53  
标签:1.0 1.1 1.2 package 版本号 兼容 json 版本

NPM 的语义版本控制

在发布 NPM 模块新版本时,建议遵循 “语义版本控制” 考虑使用这样的版本号x.y.z 控制,如下所示:

版本号规则:

  • 主版本:做了不兼容的 API 修改,不会向前兼容,一般也称为大版本,当项目依赖需要升级到大版本时需要注意。
  • 次版本:通常是做了向前兼容的新功能增加,一般也称为小版本。
  • 补丁版本:修复现有的一些错误,也是向前兼容的。

在发布 NPM 包时建议从 1.0.0 开始,例如:

  • 1.0.0:新产品首次发布。
  • 1.0.1:向前兼容的补丁版本,修改第 3 位数。
  • 1.1.0:向前兼容增加新特性,增加中间数字,将最后一位置为 0。
  • 2.0.0:不向前兼容的更新,增加第一位数字,将第二、三位数置为 0。

语义化版本号的几种表示方法:

  • ^1.1.2^ 是 NPM 安装后的默认符号,保持高版本不升级,次版本、补丁版本升级到最新,例如:^1.1.2 等价于 1.1.2 >= ^1.1.2 < 2.0.0。(^ 表示与版本兼容,但是存在一些场景,比如 1.1.0 兼容版本从最左边的非0版本号算起, 即 ^1.1.0 表示 >=1.1.0 <2.0.0. ^0.0.3 表示 >=0.0.3 <0.0.4
  • ~1.1.3:波浪符 ~ 只会升级补丁版本,例如:~1.1.3 等价于 1.1.3 >= ~1.1.3 <1.2.0。(~表示约等于版本, 即 如果存在次版本号,则允许修订号为更高版,否则允许次版本号为更高版。人话的意思就是说 ~1.2.0 存在 次版本号 2, 那么表示为 >=1.2.0 <1.3.0, 即修改修订号; ~1.0.0 只有最高版本号, 那么表示 >=1.0.0 <2.0.0, 即修改次版本号)
  • 1.1.3不加任何符号表示锁定了这个版本,不会进行任何升级
  • * 或 ""* 号或者空字符 ""不会锁定版本,每次都会升级到最新版本,前面提的问题就是这个导致的。
  • 1.0.0-alpha.1:使用 alpha、rc 等标识的表示该版本是一个预发布版本,该版本可能无法满足预期的兼容性需求,正式环境不要用。
  • 一个非语义话版本号的示例 v1.0.0:在一些版本控制的系统中通常用 v 表示版本号,例如 git tag v1.0.0,但它并不是语义化版本号。
表达式 范围 解释
1.2.3 1.2.3 精确匹配1.2.3版本
~1.2.3 >=1.2.3 <1.3.0 将“最右侧”的进行约等
~1.0.0 >=1.0.0 <2.0.0
^1.2.3 >=1.2.3 <2.0.0 将最左侧的非0以下的位数进行兼容
^0.0.3 >=0.0.3 <0.0.4

依赖锁定 - 解决版本不一致问题

考虑一个问题,项目第一次添加一个模块的依赖是 ^1.2.3,过了两周另一个同事需要修这个项目,此时依赖已经更新到 1.3.0 他在重新安装后就会得到最新的版本,这会带来一个问题,每个人得到依赖版本不一致,该如何确保团队成员的依赖版本都是一致呢?

解决依赖版本不一致的问题一种方法是 “固定依赖版本”,但在实际做法中这种很少见,大多数时候没有意识到一个问题 “安全修复”,通过版本号前加 ^ 或 ~ 符号我们可以得到补丁版本错误修复、向前兼容的小版本新功能。

解决依赖版本不一致的另一种方法是通过 lock 文件(NPM 中的 package-lock.jsonyarn 中的 yarn.lock )来解决同一个项目团队成员之间依赖版本不一致的问题,在使用 npm 或 yarn 安装之前会先检查 lock 文件上的版本,并来安装它们,有必要将 lock 文件推送至 git 仓库。

如果需要将依赖项更新到指定范围的最新版本,只需要执行 npm update 命令,该命令会遵循语义化版本控制对依赖进行升级,同时也会更新 lock 文件。

标签:1.0,1.1,1.2,package,版本号,兼容,json,版本
From: https://www.cnblogs.com/niehao/p/17477757.html

相关文章

  • php json_encode方法 报错:Inf and NaN cannot be JSON encoded
    json_encode返回falsevar_dump(json_encode($array));通过json_last_error_msg查看报错原因echojson_last_error_msg();InfandNaNcannotbeJSONencoded原因是$array里面包含了NAN和INF这些导致的解决方案如下:echojson_encode(unserialize(str_replace(array('NAN;',......
  • Python: json object_hook object_paire_hook
      data='[{"foo":"bar","foo":"baz","b":99}]'json.loads(data,object_hook=print)json.loads(data,object_pairs_hook=print)  ......
  • Edge浏览器的JSON格式化插件(FeHelper)不生效
    问题有时候懒得打开ApiPost测试接口,就直接使用Edge浏览器进行接口测试,但是最近格式化出了问题,FeHelper插件的JSON格式化不生效,不对,也不能说是完全不生效吧,测试非本地的接口倒是可以本地接口(奇怪的格式化,好丑......
  • 将JSON数据导入Excel中
    将JSON数据导入Excel中1、将在浏览器中的JSON数据复制出来,在桌面或者其他位置创建一个文本文件,将JSON数据粘贴进去,并将文件名的后缀改为.JSON格式,例如JSON.JSON{"students":[{"name":"JohnDoe","math":90,"science":85,"english&......
  • 后台返回前端的json数据,大写变小写的问题
    问题:在weebsocket通过向前端发送json数据,本来要发送的是BB字段,结果到了前端成了bb。后来发现是因为jackson自动转换了(估计是采用驼峰格式)。解决:在对应的属性上面添加@JsonProperty("BB")来指定要显示的字段名称@JsonProperty("Name")//可以标注到属性名privateS......
  • python - Flask接收和发送json
    需要接收一个json对象,然后判断主键是否存在后执行插入操作服务端fromflaskimportFlask,request,jsonifyfromgeventimportpywsgiimportpymysqlimportconfigimportjsonapp=Flask(__name__)try:mysql_conn=pymysql.connect(host=config.mysql_host,user......
  • java调用第三方接口,请求方式 get,传参方式 param形式非json。
    项目调用第三方接口,调用方式人家做了限制“请求方式get 传参方式param形式传参,非json”。所有有了下面的代码: importcom.alibaba.fastjson.JSONObject;importcom.spcp.platform.common.util.StringUtil;importcom.spcp.qypt.whpt.util.HttpClientUtil;importorg.spring......
  • Python利用jsonpickle库把对象序列化为json
    python中经常要保存一些数据,json是一种理想的存储格式,纯文本的,也方便阅读,但有时使用起来不太方便,比如下面的例子:a=jsonData['A']b=jsonData['B']只能按字典方式引用,还不支持自动完成,不如python对象使用方便.如果定义python类,使用方便,但是保存为文件时......
  • os模块、序列化模块、pickle和json的区别
    os模块#os模块是与操作系统交互的一个接口1.文件相关的os.makedirs('dirname1/dirname2')#可生成多层递归目录os.removedirs('dirname1')#若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir('dirname')#生成单级目录;相当于shell中mkd......
  • Delphi 原生支持DataSet导出Json
    Xalion发现data.DBJson单元,不知什么时候加的,官方帮助中也没有写。procedureTForm18.Button2Click(Sender:TObject);varcV:TDatasetToJSONBridge;jo:Tjsonobject;begincV:=TDatasetToJSONBridge.Create;trycV.Dataset:=mt;jo:=Tjsonobject(cV.......