Aar*_*bbs 6 typescript monorepo
我有一个包含后端(NodeJS)、前端(Angular)和共享目录(前端和后端共享的容器模型)的 monorepo。
preagree-mono/
preagree-api/
preagree-app/
preagree-shared/
Run Code Online (Sandbox Code Playgroud)
将文件夹添加到路径后,角度应用程序运行良好,并使用共享类型正确构建
preagree-app/tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "src",
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"lib": ["es2018", "dom"],
"module": "es2015",
"moduleResolution": "node",
"outDir": "./dist/out-tsc",
"paths": {
"@preagree/*": ["@preagree/*"],
"@preagree-shared/*": ["../../preagree-shared/*"]
},
"sourceMap": true,
"strictNullChecks": false,
"target": "es6",
"typeRoots": ["../node_modules/@types"],
"types": ["node"]
}
}
Run Code Online (Sandbox Code Playgroud)
但是 API 没有正确编译。PHPStorm 正在正确选择类型并从共享文件夹中导入它们,但是当我去构建时,我得到...
$ tsc && PRODUCTION=false node ./build/preagree-api/app/app.js
internal/modules/cjs/loader.js:613
throw err;
^
Error: Cannot find module '@preagree-shared/models/preagree-http'
Require stack:
- /home/nebbsie/preagree-mono/preagree-api/build/preagree-api/app/utils/responses/generic/error-response.js
- /home/nebbsie/preagree-mono/preagree-api/build/preagree-api/app/utils/responses/index.js
- /home/nebbsie/preagree-mono/preagree-api/build/preagree-api/app/preagree/users/users.route.js
- /home/nebbsie/preagree-mono/preagree-api/build/preagree-api/app/preagree/users/index.js
- /home/nebbsie/preagree-mono/preagree-api/build/preagree-api/app/routes/index.js
- /home/nebbsie/preagree-mono/preagree-api/build/preagree-api/app/app.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:610:15)
at Function.Module._load (internal/modules/cjs/loader.js:526:27)
at Module.require (internal/modules/cjs/loader.js:666:19)
at require (internal/modules/cjs/helpers.js:16:16)
at Object.<anonymous> (/home/nebbsie/preagree-mono/preagree-api/build/preagree-api/app/utils/responses/generic/error-response.js:4:25)
at Module._compile (internal/modules/cjs/loader.js:759:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
at Module.load (internal/modules/cjs/loader.js:628:32)
at Function.Module._load (internal/modules/cjs/loader.js:555:12)
at Module.require (internal/modules/cjs/loader.js:666:19)
error Command failed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
这是 API 的 tsconfig。 preagree-api/tsconfig.json
{
"compilerOptions": {
"baseUrl": "./app",
"module": "commonjs",
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": false,
"moduleResolution": "node",
"outDir": "build",
"noResolve": false,
"paths": {
"@preagree/*": ["@preagree/*"],
"@preagree-shared/*": ["../../preagree-shared/*"]
},
"target": "es6",
"types": ["node"],
"typeRoots": ["../node_modules/@types"]
},
"exclude": ["node_modules", ".vscode"],
"include": ["app/**/*"]
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是我创建了一个从共享文件导入的快速测试文件(与 API 位于同一文件夹中)。此构建并运行。
preagree-mono/
preagree-api/
preagree-app/
preagree-shared/
Run Code Online (Sandbox Code Playgroud)
TSConfigpaths仅影响类型系统。它们对运行时代码没有影响。它们本质上是告诉 TypeScript “当其他工具为我捆绑我的代码时,它将识别以下路径别名”的一种方式。
崩溃是由PRODUCTION=false node ./build/preagree-api/app/app.js通话引起的。该tsc电话没有产生任何投诉。
如果您想使用这样的 TSConfig 路径,则需要一个单独的捆绑器(例如tsup),它可以根据这些路径生成构建的输出 JS。
| 归档时间: |
|
| 查看次数: |
9026 次 |
| 最近记录: |