Node.js中package.json中库的版本号的介绍

本篇文章给大家带来的内容是关于Node.js中package.json中库的版本号的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

~和^的区别

最近总是碰到一些问题, 在本地好好的, 在线上就出现了问题, 本地也一直复现不了, 后来把node_modules目录删除了之后, 重新安装, 就在本地复现了这个问题,可以看了git history, 并没有人修改package.json中的版本号,于是认真的了解了一下package.json中库的版本号;

~和^的区别

    "babel-loader": "^7.1.1",    "body-parser": "~1.15.2"

登录后复制

npm install –save xxx, 会优先考虑使用 ^而不是~

以版本号x.y.z为例
x:主版本号, 当你做了不兼容的API修改
y:次版本号, 当你做了向下兼容的功能性问题
z:修订号, 当你做了向下兼容的问题修复

~x.y.z, 会更新到y最新的版本, 例如 body-parser: ~1.15.2, 这个库会去匹配到1.15.z的最新版本, 如果出现了1.16.0, 则不会自动升级
^x.y.z, 会更新到x的最新版本, 例如 babel-loader: ^7.1.1, 这个库会去匹配7.y.z的最新版本, 如果出现了8.1.1, 则不会自动升级

可以参考npm官方给出的解释
^1.2.3 := >=1.2.3 ^0.2.3 := >=0.2.3 ^0.0.3 := >=0.0.3

大多数情况下遵循这种版本号规则的依赖包都没问题, 但是npm是开源的世界, 并不是所有的都严格遵循这种规则, 所以会出现上述的问题;

为什么需要package锁

有如下几个可能原因, 在某些情况下, package.json是无法保证每个人自己电脑上执行的 npm install 后安装的依赖版本都是一样的
1.如果package.json中记录的依赖包的版本是一个版本范围, 一旦执行npm i 会导致这个包更新到最新版本
2.就算你依赖了一个固定版本的包(如A 1.1.1), 但你依赖的包A可能依赖其他的包B,而A在声明依赖时可能也使用了semser命名, 如 ^1.2.3, 如果包B release 了新版, 也会导致包B会安装到更新版本
3.不同人使用的npm程序的版本不同

如果依赖包的版本不一致, 会导致开发环境和生产环境产品不一致的行为; 或者导致不同团队成员之前也产品环境差异

如何解决包版本不一致的情况

1.npm 使用package-lock.json文件来解决这个问题

执行npm install会自动生成package.json文件, 只要执行普通的安装, 更新等可能会修改 package.json的npm命令, 都会自动同步修改package-lock.json文件

npm install xxxnpm rm xxxnpm update xxx

登录后复制

2.npm 还支持npm-shrinkwrap.json, 和package-lock.json功能完全一样

执行 npm shrinkwrap来生成npm-shrinkwrap.json
此命令将根据 package-lock.json 文件创建一个新的或覆盖已有的 npm-shrinkwrap.json 文件。 此命令创建和更新的文件将优先于任何其他现有或将有的 package-lock.json 文件。

3.使用yarn

使用yarn主要有一下优点

快速: 会缓存它下载的每个包,无需重复下载;能并行化操作以最大资源利用率可靠:使用格式详尽而又简洁的 lockfile文件 和确定性算法来安装依赖,能够保证在一个系统上的运行的安装过程也会以同样的方式运行在其他系统上。安全: 安装包被执行前校验其完整性

yarn速度比npm快一些, yarn的锁文件是yarn.lock, 能解决包版本不一致的情况

【相关推荐:JavaScript视频教程】

以上就是Node.js中package.json中库的版本号的介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2635833.html

(0)
上一篇 2025年3月7日 04:54:04
下一篇 2025年3月7日 04:54:13

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript在nodejs环境下执行机制和事件循环

    本篇文章给大家带来的内容是关于JavaScript高阶函数的用法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、说明 nodejs是单线程执行的,同时它又是基于事件驱动的非阻塞IO编程模型。这就使得我们不用等待异步…

    2025年3月7日
    200
  • 基于TensorFlow.js的JavaScript机器学习

    本篇文章讲述的是基于tensorflow.js的javascript机器学习,具有一定参考价值,感兴趣的朋友可以了解一下。 虽然python或r编程语言有一个相对容易的学习曲线,但是Web开发人员更喜欢在他们舒适的javascript区域内…

    2025年3月7日 编程技术
    200
  • javascript是什么

    javascript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为javascript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标准通用标记语言下的一个应用)网页上使用…

    2025年3月7日
    200
  • npm路径怎么添加到vscode

    npm路径怎么添加到vscode 安装了Node.js ,npm等命令在vscode无效怎么解决呢。 解决方法: vscode终端使用的是系统的cmd,所以vscode无法使用npm命令需要先解决cmd无法使用npm的问题。 如果是下载的z…

    2025年3月7日
    200
  • 详解JavaScript是如何运行的

    什么是JavaScript? 我们来确认一下JavaScript的定义:JavaScript 是一门解释型的动态语言。 解释型语言是相对于编译型语言存在的,源代码不是直接编译为目标代码,而是转成中间代码,再由解释器对中间代码进行解释运行。 …

    2025年3月7日
    200
  • 浏览器的事件循环详解

    前言 浏览器事件循环,基础面试中大部分都会问的,本文讲讲这个知识点。 事件循环机制 事件循环是负责执行代码、收集和处理事件以及执行队列中的子任务的一套机制。 在事件循环机制中,使用的栈数据结构便是执行上下文栈,每当有函数被调用时,便会创建相…

    2025年3月7日
    200
  • 彻底弄懂JavaScript执行机制

    本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序…

    2025年3月7日 编程技术
    200
  • javascript是什么技术

    javascript是一种属于网络的高级脚本语言,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。 javascript介绍 (推荐学习:javasc…

    2025年3月7日
    200
  • 深入研究Node.js中的日志信息

    当你开始用 javascript 进行开发时,可能学到的第一件事就是如何用 console.log 将内容记录到控制台。如果你去搜索如何调试 javascript,会发现数百篇博文和 stackoverflow 文章都会简单的告诉你用 co…

    2025年3月7日 编程技术
    200
  • 10个使用Console进行javascript调试的高级技巧

    在过去的十年中,我最热衷的事情之一就是前端开发(特别是JavaScript)。作为一个“匠人”,我喜欢专研各种工具。在本文,我会为你介绍一些用老式console来debug的技巧。 是的,我们都知道下面基本的技巧: console.log(…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论