簡體   English   中英

帶有共享軟件包的Typescript項目設置

[英]Typescript project setup with shared package

開始之前,我有一些前提:

  1. 我想要一個共享軟件包,該軟件包將包含在其他三個軟件包中,
  2. 打字稿
  3. 只是一個節點模塊
  4. 多平台用法(Windows / Linux),
  5. 使用共享包中的依賴項,
  6. (實時重新加載會很好),
  7. 不會失去以后發布共享軟件包的能力(其他三個軟件包是Web服務器,但是現在正在大量開發中),
  8. 通用腳本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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM