运行的lint
、test
等在turbo
中被称作任务即task
在代码库的根目录中可以看到,每个命令运行的其实是通过trubo run xxx
来运行的,
而这个任务都是需要通过在turbo.json
中的pipleline
中去定义的,否则找不到该任务。
而turbo run xxx
运行的时候是会找到每个工作区中在package.json
中在script
中定义了xxx
脚本的。
比如,trubo run dev
,实际上是会找在各个workspace
中的package.json
的script
中定义了dev
脚本的去运行,如果没有定义就不会运行
turborepo
中是使用**本地缓存**
来进行加速的。
hash
值。(78awdk123
)eg: ./node_modules/.cache/turbo/78awdk123
)hash
的文件夹,说明没有缓存,那么就会执行任务经过上面的步骤之后,当下次执行同样的task
时,就会命中缓存。
hash
是一样的turborepo
会去缓存目录中匹配hash
值的文件log
直接使用可以通过outputs
来配置需要缓存哪些文件。
当设置为空数组时,只缓存**log**
{
"$schema": "https://turborepo.org/schema.json",
"pipeline": {
"build": {
"outputs": ["dist/**", ".next/**"],
"dependsOn": ["^build"]
},
"test": {
"outputs": [], // leave empty to only cache logs
"dependsOn": ["build"]
}
}
}
默认情况下当工作区的任何文件更改,都会任务是该工作区的更新,hash
值就会刷新。但是有时我们只想关注部分文件(与该任务相关的文件),那么inputs
属性可以让我们指定当前任务相关的文件。只要这些配置的相关文件更新才会影响到该任务,其他文件的更新并不会影响
{
"$schema": "https://turborepo.org/schema.json",
"pipeline": {
// ... omitted for brevity
"test": {
// A workspace's `test` task depends on that workspace's
// own `build` task being completed first.
"dependsOn": ["build"],
"outputs": [],
// A workspace's `test` task should only be rerun when
// either a `.tsx` or `.ts` file has changed.
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts"]
}
}
}
DANGER
package.json
文件会一直被当做输入文件。
因为turbo
中的任务被定义在script
中,一旦package.json
文件变动,那么缓存就会失效
--no-cache
。eg: turbo run dev --no-cache
turbo.json
中配置{
"$schema": "https://turborepo.org/schema.json",
"pipeline": {
"dev": {
"cache": false // 关闭缓存
}
}
}
环境变量也会对缓存产生影响。 不过turborepo,对一些常用的框架中集成的环境变量已经做到了自动引用,不用我们去手动的声明.
{
"$schema": "https://turborepo.org/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
// env vars will impact hashes of all "build" tasks
"env": ["SOME_ENV_VAR"],
"outputs": ["dist/**"]
},
// override settings for the "build" task for the "web" app
"web#build": {
"dependsOn": ["^build"],
"env": [
// env vars that will impact the hash of "build" task for only "web" app
"STRIPE_SECRET_KEY",
"NEXT_PUBLIC_STRIPE_PUBLIC_KEY",
"NEXT_PUBLIC_ANALYTICS_ID"
],
"outputs": [".next/**"],
},
},
"globalEnv": [
"GITHUB_TOKEN" // env var that will impact the hashes of all tasks,
]
}
对于一些自定义的环境变量我们还是需要手动的声明。 这里官方推荐了两个eslint相关的插件来规范我们的环境变量相关配置。会帮助我们检测一些忽略掉的环境变量声明 https://turbo.build/repo/docs/core-concepts/caching#eslint-config-turbo
--force
# Run `build` npm script in all workspaces,
# ignoring cache hits.
turbo run build --force