[TS] Setup TypeScript Monorepo Template
此篇為各筆記之整理,非原創內容,資料來源可見下方連結與文後參考資料:
- JavaScript and TypeScript Monorepos @ Frontend Master by Mike North
- How to Setup a TypeScript project using Rollup.js @ This Dot
monorepos 指的是在一個 git repository 中有多個 libraries/projects 在內,而不是把它拆成多個獨立的 git repository 去維護。
專案位置:pjchender/typescript-monorepo-template 另一個可參考的:fem-fullstack-ts
workspaces: setup with yarn
@@ -1,9 +1,12 @@
{
"name": "js-ts-monorepos",
"version": "1.0.0",
"main": "index.js",
"repository": "git@github.com:mike-north/js-ts-monorepos.git",
"author": "Mike North <michael.l.north@gmail.com>",
"license": "BSD-2-Clause",
- "private": true
+ "private": true,
+ "workspaces": [
+ "packages/*"
+ ]
}
備註
在 npm 7 之後也有支援 workspaces,用法可以參考最下方的補充。
如果是多個不同性質的專案,可以設定成類似:
// package.json
{
"workspaces": ["client", "server", "shared"]
}
typescript: composite project
composite @ TypeScript > tsconfig
備註
下述設定方式適合用在透過 tsc 編譯專案時,若是用其他編譯工具需自行調整。
我們不需要在每個 libraries/projects 中都建立各自的 tsconfig.json
,而是可以把它定義在一個地方,library 內的 tsconfig 就去繼承它就好。
在 tsconfig.json
的 compilerOptions
中加上 composite: true
表示它是其中一部分的設定檔,加上這個項目後:
- 若沒有指定
rootDir
預設會是帶有tsconfig.json
檔案的那個目錄 - 套用此項目的檔案一定要有
include
和files
declaration
預設會是true
{
"extends": "../tsconfig.settings.json",
"compilerOptions": {
"composite": true,
"outDir": "dist",
"rootDir": "src"
},
"include": [
"src"
]
}