我有一个使用yarn workspaces
和lerna
的monorepo项目;它的所有部分都是用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
中看到了手动调整,并拒绝进一步更新这些文件。
为了克服这种不便,我在根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版本之外,以使我的软件包保持较小。
答案 0 :(得分:1)
https://github.com/Izhaki/mono.ts
它使用毛线工作区并与VSCode完美结合。我希望自述文件足够清楚。
基本上,使用两个(并行)打字稿配置树: