7

我有一个使用yarn workspacesand的 monorepo 项目lerna;它的所有部分都是用 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所有包以保持链接的依赖项同步。

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

为了克服这种不便,我在 root 中编写了这两个脚本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,我packages/package-n/package.json通过替换"types": "dist/index.d.ts""types": "src/index.ts". 这修复了命令+单击和重构,这很棒。当涉及一次性构建时(例如在发布之前),"types"请恢复为"dist/index.d.ts".

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

4

1 回答 1

1

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

它使用纱线工作区并与 VSCode 很好地结合。我希望自述文件足够清楚。

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

  • 预构建- 使用别名(用于 VSCode、测试、webpack 等)。
  • 构建- 本质上使用 typescript 3 项目引用进行发布。
于 2018-12-27T21:46:24.463 回答