create-next-app生成的package.json依赖无^/~符号导致无法更新的相关疑问
create-next-app生成的package.json依赖无^/~符号导致无法更新的相关疑问
嘿,这个问题我之前也碰到过,来给你捋捋清楚:
首先,这是create-next-app的刻意设计!Next.js团队这么做是为了让你初始化的项目依赖版本完全锁定,毕竟Next.js本身和它的配套依赖(比如eslint-config-next)版本是严格绑定的,版本不匹配很容易出现兼容性问题。刚创建的项目就因为依赖版本意外更新出问题,那体验可太糟了,所以直接写死固定版本是为了给你一个稳定的初始环境。
然后说要不要手动加^或者~:
- 如果你希望项目能自动接收小版本的bug修复更新,加
^是没问题的——它允许更新到同大版本下的最新小版本(比如13.4.7可以更到13.x.x); ~则更保守,只允许更新到同小版本下的补丁版本(比如13.4.7更到13.4.x);- 但要注意,手动修改后,后续更新前最好先看Next.js的更新日志,确认依赖版本之间是兼容的,不然可能会踩坑。
至于怎么让npm自动加前缀:
npm本身默认就是给依赖加^的(针对版本号大于1.0.0的包),只是create-next-app是直接生成固定版本的package.json,不是通过npm install安装的,所以没有前缀。之后你自己安装新依赖时,比如运行npm install react-router-dom,npm会自动给你加上^(除非你加了--save-exact参数强制固定版本)。
如果你想修改npm的默认前缀,也可以通过配置:
- 要默认加
^(本来就是默认值,不用改,不过可以确认):npm config set save-prefix '^' - 要默认加
~:npm config set save-prefix '~'
最后提一句,其实不用太依赖前缀符号来更新,Next.js官方更推荐用npm update next或者像npm-check-updates这类工具来批量更新,这样能更好地控制版本兼容性,比单纯靠前缀靠谱多啦。
备注:内容来源于stack exchange,提问作者Aiden Santos
相关产品推荐
相关产品推荐

