我有一个单体仓库,其中包括后端(NodeJS)、前端(Angular)和共享目录(被前后端共用的容器模型)。
preagree-mono/
preagree-api/
preagree-app/
preagree-shared/
使用共享类型,将文件夹添加到 paths 后,Angular 应用程序可以完美运行并正确构建。
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"]
}
}
然而,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.
这是 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/**/*"]
}
奇怪的是,我创建了一个快速测试文件,从共享文件中导入(与API在同一文件夹中)。这个构建并运行。
import { UsersUpdatePayload } from '@preagree-shared/models/users';
const users: UsersUpdatePayload = { lastName: 'Aaron' };
console.log(users);