繁体   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