[前端工程化]turborepo细节

335 阅读1分钟

最近在抽取项目的模块, 看到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中, 根本不知道这个工程会用这个依赖