应该如何构建monorepo中的私有(未发布)Typescript库,以便它们可以在repo中的其他库和应用程序(包括Node和浏览器)之间共享?我使用nx
和pnpm
来管理monorepo。
1.它们应该被转译成Javascript,还是消费包可以直接导入Typescript?
1.应该如何配置它们的pnpm依赖关系(dependancies
,peerDependancies
),以便消费包不需要列出这些依赖关系,但也防止多个副本?
1.在Node和浏览器构建中使用的私有包应该使用什么模块格式?
1.这些库是否需要与esbuild
/webpack
/etc捆绑在一起?
我知道有很多问题,但它们都归结为库的构建步骤应该是什么样子的。我目前正在尝试tsc
和es2020
模块,但遇到了一些问题,例如Jest无法将这些库导入到依赖库中。
2条答案
按热度按时间zz2j4svz1#
您可以在一个步骤中将所有包构建在一起。如果您喜欢不同的代码风格,它们可以有不同的tsconfig构建配置。
您引用了类型脚本(因为您甚至不需要构建到JS)。您的导入可以使用包名作为引用
import {Foo} from '@CompanyName/fooLib'
,pnpm工作区将它们链接到正确的包。在package.json中引用依赖项时不应使用版本:
"@CompanyName/fooLib": "*"
,因为除非您进行发布,否则您将仅使用最新版本的共享库。捆绑取决于你的框架,项目大小等。还有Turbopack,Vite(带和不带SWC),所以如果不知道速度或LTS对你来说有多重要,就不能回答这个问题。
dwthyt8l2#
1.它们应该被转译成Javascript,还是消费包可以直接导入Typescript?
我使用
tsc
为dist/
文件夹中的库构建.js
和.d.ts
。1.应该如何配置它们的pnpm依赖关系(依赖关系,对等依赖关系),以便消费包不需要列出这些依赖关系,但也防止多个副本?
简单的
dependancies
似乎是工作。1.在Node和浏览器构建中使用的私有包应该使用什么模块格式?
只要其他工具(Node、Jest等)配置为预期ESM,
package.json
中的type: "module"
就会正常工作。1.这些库是否需要与esbuild/webpack/etc捆绑在一起?
不,使用包可以拉入他们需要的文件,而不需要捆绑。