如何让Lerna add命令将package.json依赖版本设为*
解决Lerna添加本地工具包时版本自动锁定的问题
问题背景
在组件仓库的自动化脚本里,用npx lerna add --dev LOCAL_TOOLS_PACKAGE --scope=${newComponentPackageName}给新组件的package.json加开发依赖,想要把版本设为"*"来自动使用最新版,但实际总是生成带^前缀的具体版本(比如^3.4.1)。
解决办法
1. 直接修改package.json文件
绕开Lerna的版本推断逻辑,执行完lerna add后用脚本修改目标文件:
- Node.js脚本写法:
const fs = require('fs'); const path = require('path'); const pkgPath = path.resolve(`packages/${newComponentPackageName}/package.json`); const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); if (pkg.devDependencies?.LOCAL_TOOLS_PACKAGE) { pkg.devDependencies.LOCAL_TOOLS_PACKAGE = '*'; fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2)); }
- Unix-like环境用sed命令:
sed -i '' 's/"LOCAL_TOOLS_PACKAGE": "[^"]*"/"LOCAL_TOOLS_PACKAGE": "*"/' packages/${newComponentPackageName}/package.json
2. 指定版本参数执行Lerna命令
直接在lerna add里指定版本为*,部分Lerna版本支持这种写法:
npx lerna add --dev LOCAL_TOOLS_PACKAGE@* --scope=${newComponentPackageName}
如果还是不行,先开启exact模式去掉^前缀,再配合脚本修改版本:
在lerna.json中添加配置:
{ "command": { "add": { "exact": true } } }
3. 用npm代替Lerna添加依赖
直接切换到目标组件目录下用npm安装,强制版本设为*:
cd packages/${newComponentPackageName} && npm install --save-dev LOCAL_TOOLS_PACKAGE@*
内容的提问来源于stack exchange,提问作者Mad Bernard
相关产品推荐
相关产品推荐

