我有一个使用yarn workspaces
and的 monorepo 项目lerna
;它的所有部分都是用 TypeScript 编写的。这些模块位于子文件夹中packages/module-n
,每个模块都有自己package.json
的以下几行:
"main": "dist/index.js",
"types": "dist/index.ts",
每个包的源代码都位于packages/module-n/src/index.ts
,所以没有什么不寻常的。
当涉及到从命令行构建或发布时,一切都很好——这要归功于每个包文件夹中tsconfig.json
的build
脚本。然而,当涉及到 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
并拒绝进一步更新这些文件。
为了克服这种不便,我在 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 版本中,以保持我的包很小。