我有一个使用yarn workspaces和lerna; 的monorepo项目。它的所有部分都用TypeScript编写。这些模块位于类似的子文件夹中,packages/module-n并且每个模块都有自己package.json的行,并带有以下几行:
"main": "dist/index.js",
"types": "dist/index.ts",
Run Code Online (Sandbox Code Playgroud)
每个软件包的源代码都位于中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\""
Run Code Online (Sandbox Code Playgroud)
这是我在同一根目录中使用它们的方式package.json:
"build": "yarn use-prod-typings && lerna run build",
"build:watch": "lerna run build; yarn use-dev-typings && lerna run --parallel build:watch",
Run Code Online (Sandbox Code Playgroud)
我们的想法是,在我开始编辑VSCode文件,从而去 …
typescript visual-studio-code typescript-typings lerna monorepo