开始之前,我有几个前提条件:
build:web
build:api
build:admin
。我梦folder以求的文件夹结构是:
/
/node_modules/***
/packages/shared/package.json // Shared dependencies like typeorm, lodash etc..
/packages/shared/src/index.ts
/packages/shared/src/models/User.ts
/packages/web/package.json
/packages/web/tsconfig.json
/packages/web/src/index.ts // first express server (using shared code)
/packages/api/package.json
/packages/api/tsconfig.json
/packages/api/src/index.ts
...
/package.json
/tsconfig.common.json
Internet上有很多解决方案-Lerna,打字稿项目参考,npm / yarn链接...但是我找不到合适的解决方案...
例如,这个https://github.com/Quramy/lerna-yarn-workspaces-example很酷,但是我无法设置为运行以下内容:
// package.json
{
"scripts": {
"debug:web": "concurrently \"(cd packages/shared && tsc -w)\" \"(cd packages/web && tsc -w)\" \"(cd packages/web && nodemon --inspect dist/index.js --watch .. /)\""
...
我想连续构建共享软件包(生成dist / index.js和.ts文件),并在../(packages文件夹)中发生更改后在nodemon中重新启动服务器。
几个小时后,我放弃了重新加载代码的机会,并尝试通过“最简单的方式”尝试找到-shared
中没有软件包,但直接通过以下方式包含代码:
// shared/index.ts
export const createConnection = () => ....
// web/index.ts
import { createConnection } from 'shared'
它似乎也不起作用:
// tsconfig.json
{
"extends": "../../tsconfig.settings.json",
"compilerOptions": {
"rootDir": "../",
"outDir": "dist",
"baseUrl": "./",
"paths": {
"shared": [ "../shared/src/" ]
}
}
}
现在的问题是
File /shared/src/index.ts is not listed within the file list of the project in tsconfig.json. Projects must list all files or use an 'include' pattern.
下一步(显然)是
{
"extends": "../../tsconfig.settings.json",
"include": [
"./src/**/*.ts",
"../shared/src/**/*.ts"
],
"compilerOptions": {
"rootDir": "../",
"outDir": "dist",
"baseUrl": "./",
"paths": {
"shared": [ "../shared/src/" ]
}
}
}
这有效!没有错误,但“ dist”中也没有文件...大声笑
我很确定,有一些不错的解决方案,例如示例,否则它也不起作用,但是我找不到或构建它。
答案 0 :(得分:0)
如果我错了,请纠正我,但是您需要一个示例,该项目将项目分成以Typescript编写的单一存储库中的程序包,并且某些程序包彼此依赖。 在这种情况下,我创建了这样的项目。我使用了Typescript的一项新功能:项目引用。您可以在配置文件中指定其他tsconfig,并可以为其定义依赖项。例如:程序包B依赖程序包A。Typescript将在开始编译A之前编译B并使用其声明。
这是tsconfig的一个小例子
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "lib"
},
"include": ["src"],
"exclude": ["lib"],
"references": [{ "path": "../util" }, { "path": "../crud-request" }]
}
您可以在此处获取更多信息:https://www.typescriptlang.org/docs/handbook/projectreferences.html
我以这个项目为例来构建自己的项目,也许对您也很有用: https://github.com/nestjsx/crud