![](/img/trans.png)
[英]Setup a Typescript project with classes shared between client and server apps?
[英]Typescript project setup with shared package
開始之前,我有一些前提:
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
互聯網上有很多解決方案-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”中也沒有文件...大聲笑
我很確定,有一些不錯的解決方案,例如示例,或者它也不起作用,但是我找不到或構建它。
如果我錯了,請糾正我,但是您需要一個示例,該項目將項目分隔為使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.