TypeScript NPM 包的目标架构

Target architecture for TypeScript NPM packages

我正在使用 TypeScript 开发许多 NPM 包,我想知道支持不同目标架构的最佳方法。

如果你编译成 ES3,你有最广泛的支持,但也有额外的兼容性样板(大小,部分无法解析)。如果你的目标是 esnext,你基本上没有样板(干净的输出代码!),但支持非常有限。

问题是 TypeScript 编译器一般不会转译 JS 代码或 node_modules 中的任何代码。因此,如果你例如将一个库编译为 ES6,并且有人想在他们的浏览器应用程序(针对 ES3 或 ES5)中使用它,那么他们将不能只使用该库。

此处的最佳做法是什么?我应该如何配置我的 package.jsontsconfig.json?如果图书馆用户需要做某事,这里的首选方式是什么?

非常感谢!

我认为可以妥协。对我来说,在库中使用 es6 的主要原因是支持汇总 tree-shaking。为此,package.json 有选项 :

"main": "dist/alina-core.js",
"module": "dist/alina-core-es.js",

当用户使用rollup时,无论如何都需要在tree-shaking之后转译成ES5,所以,在module指定ES6版本。但是如果库用户使用旧的构建管道,他将获得 main 转译的 ES5 版本。