TypeScript单一内容中对等包的类型定义:开发与生产

时间:2018-04-30 17:24:41

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

我有一个使用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所有包以保持链接的依赖项同步,事情也变得不方便。

当我命令点击引用对等包的定义时,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之前,我将所有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版本之外,以使我的软件包保持较小。

1 个答案:

答案 0 :(得分:1)

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

它使用毛线工作区并与VSCode完美结合。我希望自述文件足够清楚。

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

  • 预构建-使用别名(用于VSCode,测试,Webpack等)。
  • 构建-本质上使用打字稿3项目参考进行发布。