最近在抽取项目的模块, 看到turborepo根目录也有package.json, 各对应app里也有package.json, 在想如果通用的依赖都写在这里不是很方便吗?说干就干;
当然为了验证各app里是否会使用工程的配置, 先把app内的都删掉, 我这里删的是typescript, 但是删完好像也能编译, 而且版本不是root指定的, 可能是因为我global安装了typescript导致的吧, 那我换一个 rimraf,
先在app中package.json的script中写一个 clean, 然后调用 rimraf dist
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"test": "tsc --version",
"clean": "rimraf dist"
},
}
pnpm add -D rimraf
好的, 收到了警告
ERR_PNPM_ADDING_TO_ROOT Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don't want to see this warning anymore, you may set the ignore-workspace-root-check setting to true.
很明显, 说你直接给root安装依赖可能不是你预期的结果, 如果确认如此添加一个 -w 标识, 好, 那就
pnpm add -D rimraf -w
安装成功了, 去app中看是否生效
PS D:\workspace\learn\arch\menorepo\repo-test\apps\web> pnpm clean
> web@1.0.0 clean D:\workspace\learn\arch\menorepo\repo-test\apps\web
> rimraf dist
在子项目中调用成功了, 证明想法是通的, 那么为什么这个不是默认开启的呢? 去找文档看有没有说明
这个在一处找到了大概的意思, 安装在子项目中是可以保持独立的, 即我只打开这个子工程也是能安装依赖和运行的, 如果放在root中, 根本不知道这个工程会用这个依赖