You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过命令行安装带~的npm包并指定TypeScript版本写入package.json

关于npm安装带波浪号~版本包的问题解答

1. 如何通过命令行安装带波浪号~的npm包?

其实操作很简单,直接在命令行里指定包名加上@~<具体版本号>,再根据需求加上--save(生产依赖)或--save-dev(开发依赖)参数就行。举个实际例子:

# 安装生产依赖,版本带~前缀
npm install lodash@~4.17.20 --save

# 安装开发依赖,版本带~前缀
npm install typescript@~3.9.3 --save-dev

这里的波浪号~作用是锁定主版本和次版本,允许npm安装该范围内的最新补丁版本。比如~3.9.3会匹配所有3.9.x的版本(像3.9.4、3.9.7这类),但不会升级到3.10.0及更高的次版本,适合你想保留小版本稳定、只接受bug修复的场景。

2. 为什么安装TypeScript时~3.9.3没生效,反而变成了^3.9.7?怎么解决?

你遇到的这个情况,大概率是npm的默认配置在搞鬼——npm默认的save-prefix(保存到package.json时的版本前缀)是^,部分版本的npm会在安装时自动把你指定的~版本替换成实际安装的最新补丁版本,再加上默认的^前缀,就出现了"typescript": "^3.9.7"的情况。

给你两个实用的解决办法:

方法一:临时指定本次安装的前缀为~

直接在安装命令里加上--save-prefix="~"参数,强制npm在package.json里写入~前缀:

npm install typescript@3.9.3 --save-dev --save-prefix="~"

执行完这个命令,package.json里就会出现"typescript": "~3.9.3",同时npm会自动安装3.9.x系列的最新补丁版本(也就是你看到的3.9.7),完全符合你的需求。

方法二:修改npm默认配置,以后都用~作为前缀

如果你希望以后所有包的安装都默认用~而不是^,可以修改npm的配置:

# 全局生效(所有项目都用~作为默认版本前缀)
npm config set save-prefix "~"

# 仅当前项目生效(进入项目根目录后执行)
npm config set save-prefix "~" --location=project

改完之后,再执行npm install typescript@3.9.3 --save-dev,npm就会自动把"typescript": "~3.9.3"写入package.json了。

另外提一句:如果你想精确安装3.9.3这个特定版本,而不是它的最新补丁版,可以加上--save-exact参数,这样package.json里会直接写"typescript": "3.9.3",不带任何前缀哦。

内容的提问来源于stack exchange,提问作者Jon Sud

火山引擎 最新活动