还有多少前端搞不懂 Nodejs package 的版本号规则...

发布于 1周前 作者 nodeper 来自 nodejs/Nestjs

前端 小 B 今日发出灵魂提问:

package.json 里说了 “pnpm”: "^8.6.3"

为啥用不了 pnpm 9

我:?????


还有多少前端搞不懂 Nodejs package 的版本号规则…


34 回复

如果他比你工资低,那么可能没啥问题,如果他比你工资高,那你质疑有理


所以我觉得说现在前端卷、java 卷其实很扯;我遇到过好几个前端、java 就只知道 csdn ,上不来 github ;好几个前端连 https://developer.mozilla.org/ 都不知道;更要命的是好多赛博文盲也敢入行当程序员,连最基本的在 win 上面安装 nodejs 都能给下载到收费版本的,你还指望这些人会用 nvm 、会 vim

菜鸟大把和卷不冲突,岗位就 10 个有 100 个卷王,1000 个菜鸟,很正常。


程序员严重过剩了,v2 上只要是询问转行当程序员的,我都是一刀切反对。

很多年前面试的时候就发现了,程序员之间有点文人相轻的感觉。知道点别人晚知道的东西 可悲的自信心顿时膨胀了 重要吗 不重要

1.“前端 小 B ”是什么?
2.没有人生下来就清楚所有东西。
3.你也有还没搞懂的东西。
4.你大概就是那种面试者有一个问题答不上来就嘴角上扬、洋洋得意的面试官吧。
5.“前端 小 B ”的意思你心里清楚,但我们不知道,短短几个字就已经暴露你至少是一个以自我为中心的家伙。
6.上一个关于小 B 的帖子也是一样的口气呢 https://v2ex.com/t/1055812 而且同样的东西这里发,即刻也发。

说明他可能之前的工作中一直有大佬贴心照顾,没处理过大版本升级之类的问题,也没有面面俱到地学过一款包管理工具,不知道很正常,又不影响开发

这个行业被搞坏主要是混子太多。混碗饭也没什么,普通人本来就是混,主要是相当一部分不自知,这个群体很浮躁。
当把“向上管理”这类奉为圭臬时,这个行业就臭了。当初 php 与 java 吵的时候好歹还能理性谦让,现在的前端圈听不下一点不同的想法,互相瞧不上。就工作能力来说,先不管什么技术路线,十年前的贴吧,人家 bb 手撸都全方位吊打。还有各个吹破天的用户体验团队,最后的产品还没有 jquery 时代舒服,jq 可能没有 css3 或者 shader 动画流畅,但是那个时候的产品可以看到别人用了心思,产品让人的感受不过时。
跟以前的书呆子一样,没有自己的理解,会背套路,然后相互 diss ,做题家挺形象

我也不懂,虚心求教为什么?

虽然#5 说的很对,但如果我在工作中遇到这种极品同事,我的血压也会忍不住往上涨的。

这种问题好比你找了个家政打扫,上门了问你怎么擦桌子还要用抹布的离谱问题。


8 是主要版本号
6 是次要版本号
3 是补丁版本号
使用 ^ 表示,你可以自动接收到所有 8.x.x 的更新,只要这些更新不会增加主要版本号。你可以自动更新到 8.7.0 、8.9.5 等,但不会自动更新到 9.0.0 或更高的主要版本,应为主版本大概率有不兼容行为(默认假设

这个版本约束用的 https://semver.org/lang/zh-CN/ 规范

很多包管理器都支持,比如 rust-cargo/js-npm/dart-pub/php-composer

这东西和前端没关系,跟人有关系

另外 前端另一个主流包管理 pnpm 现在安装新包默认是固定版本,不再默认使用 semver 规范里的范围版本

不知道 semver 其实也没什么,谁都不是生来什么都知道的

但是他为什么不问搜索引擎和大语言模型,而能让你知道他不懂这个?

12

> 你可以自动接收到所有 8.x.x 的更新

并不是,在默认有 lock 文件的情况下,安装的是 lock 里的版本,并不是 8.latest.latest

你需要删除 lock 文件重新安装,才能接收到 8.latest.latest

虽然规范规定了兼容性是这样,但是开发者可不一定遵守,比如 https://www.npmjs.com/package/vue-cropper 在某个版本出现了破坏性更改(改变了默认导出),但是并没有改变主版本号

规范这东西不一定每开发者都能严格遵守

这个东西必须懂吗? 我就不懂, 但这个不耽误我开发前端。

如果浪费大佬的时间,请大佬忽略就好。
首先得看一下他提问的方式,以及自己的尝试,能给出具体报错信息的我感觉还是会给他看一眼,帮他先解决,至少比发个贴节省时间,而且 B 站用户不会看这个贴子,最好是放在 B 站专栏,搞个常见问题汇总,有人问就先去看文章。

只是我个人想法。大佬完全可以忽略我的想法,毕竟大佬的时间是宝贵的

用 “packageManager” 限制更恶心

这个网站我知道,但是老实说我真没上过几次。

https://docs.npmjs.com/cli/v10/configuring-npm/package-json#dependencies

有的人习惯自己解决问题,有的人习惯问问题,过于独立或者过于依赖别人其实都不好。

大家放心哈哈哈哈

我人还是比较 nice 的,

组里比较有意思的技术问题,我就会放到 v 站上来给大家分享

尤其是楼下的评论哈哈

看着大家你一言我一嘴的, 比单独写个笔记强多了

(: 小 B 是我好朋友, 我们比较聊的开

其他的不说,nvm 是真的巨好用

补充一点:主版本号为 0 的情况下,^匹配有一些差异,会固定次版本号,查找最新的修订版本

#2 说卷的基本都是白嫖自学跟培训班出来的,想拿高薪又没硬实力!

太多了 , 多少著名库破坏性更新 , 不加大版本的 , 1.0.0=>2.0.0

最卷的地方通常就是低端劳动力密集的地方

确实,我都不知道有啥好得意的,闻道有先后,术业有专攻,懂得越多才会发现要学的更多,真没必要自己知道的早一些就看不起人家,你如果不愿意指导或者看不惯,大可以不讲和不理会,也不至于这个那个开喷的,至于淘汰不淘汰啥的,市场也会给出答案,也不是你一言以蔽之的


2 没人关心你是不是生下来就知道所有东西。大家只关心你现在是否知道该知道的东西
3 作者也有没搞懂的东西并不重要,关键是他还没遇到不懂的问题阻碍到工作就没问题
456 把现实问题归咎于屁股问题

阅 谢谢你 七月的夏天

谁也没规定擦桌子一定得用抹布,有可能他有自动擦桌子机器人,那为什么还要手动用抹布擦

为什么不用 corepack 加 packageManager 管理?

搞不懂没关系,去搜索一下就行了
啥都不做直接开问,我觉得不妥

关于Node.js package的版本号规则,其实它遵循的是语义化版本管理(SemVer)规范,这是一个广泛使用的版本号管理标准。下面我将尽量简洁明了地解释这一规则,并通过代码示例进行展示。

Node.js模块的版本号通常由三个数字组成,格式为MAJOR.MINOR.PATCH,分别代表:

  • MAJOR(主版本号):当你做了不兼容的API修改时,需要增加主版本号。
  • MINOR(次版本号):当你做了向下兼容的功能性新增时,需要增加次版本号。
  • PATCH(修订版本号):当你做了向下兼容的问题修正时,需要增加修订版本号。

package.json文件中,依赖版本号前通常会带有^~符号,它们表示允许安装的版本范围:

  • ^符号:表示锁定主版本,允许次版本和修订版本升级到最新。例如,^1.1.1允许安装1.x.x中的最新版本,但不会升级到2.x.x
  • ~符号:表示锁定次版本,只允许修订版本升级到最新。例如,~1.1.1允许安装1.1.x中的最新版本,但不会升级到1.2.x2.x.x

示例代码如下:

{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.17.1",
    "mongoose": "~5.10.0"
  }
}

以上就是Node.js package版本号的基本规则,希望对你有所帮助。

回到顶部