如何在 TypeScript Monorepo 中实现无构建管道

Ale*_*lex 6 typescript tsc tsx monorepo

假设我有这个 monorepo:

/apps
/apps/app1
/apps/app1/src  (contains index.ts and many other files and subfolders here)
/apps/app1/tsconfig.json
/apps/app1/package.json
/apps/app2 
/apps/app2/src   (contains index.ts and many other files and subfolders here)
/apps/app2/tsconfig.json
/apps/app2/package.json
/common
/common/package1
/common/package1/src
/common/package1/src/utility1.ts
/common/package1/src/utility2.ts
/common/package1/tsconfig.json
/common/package1/package.json
/tsconfig.json
/package.json
Run Code Online (Sandbox Code Playgroud)

我只需要 esm 就可以在其中工作。

我怎样才能让 tsx、tsc 或任何其他 ts 工具运行一个或多个使用“common/*/src”中内容的应用程序?基本上不需要将“common”中的内容构建到 dist 文件夹中。

因此,每次我对其中的文件进行更改时,/common当我在监视模式下运行应用程序时,它们都会立即生效。

Fre*_*man 1

首先,在您的根文件夹中monorepo,尝试运行npm init -y以创建一个文件并通过运行将package.json其安装TypeScript为依赖项,然后再次在根文件夹中创建一个包含以下内容的文件:ts-nodedevnpm install --save-dev typescript ts-nodetsconfig.json

   {
     "compilerOptions": {
       "module": "es2020",
       "resolveJsonModule": true,
       "esModuleInterop": true,
       "rootDir": ".",
       "outDir": "./dist"
     },
     "include": [
       "apps/*/src",
       "common/*/src"
     ]
   }
Run Code Online (Sandbox Code Playgroud)

现在在每个应用程序的文件夹(/apps/app1/apps/app2)中,更新tsconfig.json如下:

   {
     "extends": "../../tsconfig.json",
     "compilerOptions": {
       "outDir": "./dist",
       "rootDir": "./src",
       "jsx": "react-jsx"
     },
     "include": [
       "src"
     ]
   }
Run Code Online (Sandbox Code Playgroud)

在每个应用程序的文件夹(/apps/app1/apps/app2)中,更新package.json然后尝试运行npm start以在每个应用程序的文件夹的监视模式下启动应用程序:

  {
     "scripts": {
       "start": "ts-node src/index.ts"
     }
   }
Run Code Online (Sandbox Code Playgroud)

最后,对其中文件所做的任何更改/common将在运行应用程序时立即生效!