如何通过命令行安装带~的npm包并指定TypeScript版本写入package.json
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




