在monorepo中构建私有Typescript包

pnwntuvh  于 2023-05-19  发布在  TypeScript
关注(0)|答案(2)|浏览(143)

应该如何构建monorepo中的私有(未发布)Typescript库,以便它们可以在repo中的其他库和应用程序(包括Node和浏览器)之间共享?我使用nxpnpm来管理monorepo。
1.它们应该被转译成Javascript,还是消费包可以直接导入Typescript?
1.应该如何配置它们的pnpm依赖关系(dependanciespeerDependancies),以便消费包不需要列出这些依赖关系,但也防止多个副本?
1.在Node和浏览器构建中使用的私有包应该使用什么模块格式?
1.这些库是否需要与esbuild/webpack/etc捆绑在一起?
我知道有很多问题,但它们都归结为库的构建步骤应该是什么样子的。我目前正在尝试tsces2020模块,但遇到了一些问题,例如Jest无法将这些库导入到依赖库中。

zz2j4svz

zz2j4svz1#

您可以在一个步骤中将所有包构建在一起。如果您喜欢不同的代码风格,它们可以有不同的tsconfig构建配置。
您引用了类型脚本(因为您甚至不需要构建到JS)。您的导入可以使用包名作为引用import {Foo} from '@CompanyName/fooLib',pnpm工作区将它们链接到正确的包。
在package.json中引用依赖项时不应使用版本:"@CompanyName/fooLib": "*",因为除非您进行发布,否则您将仅使用最新版本的共享库。
捆绑取决于你的框架,项目大小等。还有Turbopack,Vite(带和不带SWC),所以如果不知道速度或LTS对你来说有多重要,就不能回答这个问题。

dwthyt8l

dwthyt8l2#

1.它们应该被转译成Javascript,还是消费包可以直接导入Typescript?
我使用tscdist/文件夹中的库构建.js.d.ts
1.应该如何配置它们的pnpm依赖关系(依赖关系,对等依赖关系),以便消费包不需要列出这些依赖关系,但也防止多个副本?
简单的dependancies似乎是工作。
1.在Node和浏览器构建中使用的私有包应该使用什么模块格式?
只要其他工具(Node、Jest等)配置为预期ESM,package.json中的type: "module"就会正常工作。
1.这些库是否需要与esbuild/webpack/etc捆绑在一起?
不,使用包可以拉入他们需要的文件,而不需要捆绑。

相关问题