【问题标题】:Type definitions for peer packages in TypeScript monorepos: development vs productionTypeScript monorepos 中对等包的类型定义:开发与生产
【发布时间】:2018-10-10 20:01:07
【问题描述】:

我有一个使用yarn workspaceslerna 的monorepo 项目;它的所有部分都是用 TypeScript 编写的。这些模块位于packages/module-n 等子文件夹中,每个模块都有自己的package.json,其中包含以下几行:

"main": "dist/index.js",
"types": "dist/index.ts",

每个包的源代码都位于packages/module-n/src/index.ts,所以没什么异常。

当涉及到从命令行构建或发布时,一切正常 - 感谢每个包文件夹中的 tsconfig.jsonbuild 脚本。然而,在 VSCode 中进行日常代码编辑时,事情变得不太方便,尽管我运行 tsc --watch all packages 以保持链接的依赖项同步。

当我命令单击引用对等包的定义时,VSCode 将我带到packages/package-n/dist/index.d.ts,而不是我当前可能正在编辑的packages/package-n/src/index.ts。另外,当我想用​​F2 重构某些东西时,dist/index.d.ts 文件可能偶尔会被修改,这迫使我由于错误而重新启动build:watch。问题是 TypeScript 在 **/dist/index.d.ts 中看到手动调整并拒绝进一步更新这些文件。

为了克服这种不便,我在根package.json 中编写了这两个脚本,但我不是我自己的解决方案的忠实拥护者:

"use-dev-typings": "lerna exec \"replace --quiet dist\\/index\\.d\\.ts src/index.ts package.json\"",
"use-prod-typings": "lerna exec \"replace --quiet src\\/index\\.ts dist/index.d.ts package.json\""

这是我在同一个根目录package.json 中使用它们的方式:

"build": "yarn use-prod-typings && lerna run build",
"build:watch": "lerna run build; yarn use-dev-typings && lerna run --parallel build:watch",

这个想法是,在我开始在 VSCode 中编辑文件并因此使用yarn build:watch 之前,我通过将"types": "dist/index.d.ts" 替换为"types": "src/index.ts" 来修补所有packages/package-n/package.json 文件。这修复了命令+单击和重构,这很棒。对于一次性构建(例如在发布之前),"types" 恢复为 "dist/index.d.ts"

我想知道是否有更好的方法来实现我所追求的目标,如果有人能给我建议,那就太好了。我很确定有一天我会不小心提交"src/index.ts",甚至发布具有此值的版本。 src/*.ts 的内容不包括在 npm 版本中,以保持我的包很小。

【问题讨论】:

  • 对于那些也在为同样的问题而苦苦挣扎并希望看到解决方法的人,这里是我正在应用上述 hack 的 repo:github.com/gicentre/litvis

标签: typescript visual-studio-code typescript-typings lerna monorepo


【解决方案1】:

https://github.com/Izhaki/mono.ts

它使用 yarn 工作空间并与 VSCode 很好地结合。我希望 README 足够清楚。

基本上,使用两个(并行)打字稿配置树:

  • 预构建 - 使用别名(用于 VSCode、测试、webpack 等)。
  • 构建 - 本质上使用 typescript 3 项目参考进行发布。

【讨论】:

  • 感谢您回答@Izhaki!您如何建议使用我在问题中描述的类型来解决这个问题?这是我主要关心的问题,我只能通过添加那些名为 use-dev-typings / use-prod-typings 的 hacky 脚本来克服它。
  • 刚出来:github.com/Izhaki/mono.ts;仍然需要添加 README 等,但基本上任何 tsconfig.json 都是预先构建的(vscode 和 mocha),任何 tsconfig.build.json 都是......嗯......构建相关的。
猜你喜欢
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2018-08-24
相关资源
最近更新 更多