关于工具库(Library)上的一些FAQ
Thu Sep 15 2022 · 25min
以下FAQ大多假定的场景是工具库、library
什么场景下需要转译ESM
Library. 也就是对于npm包,我们是需要转移成ESM的,这样使用方在打包的时候就可以进行tree-shaking, 但如果你的场景是application,比如网页应用,是不涉及转译ESM的,ESM针对于库。
转译ESM包含哪些步骤
- 首先是将模块系统transform成ESM,即import satement
- 然后是转译代码,将源代码进行转译,比如通过tsconfig.json的target进行设置,转译成目标平台可执行的代码。这一步也不是强制的,兜底是使用方在bundle的时候通过插件配置进行统一转译,但是作为库作者,最好还是做在前置链路,因为你不能强保证使用方能够正确配置插件进行转译
目标平台是如何找到引入的工具包的
这个问题主要是楼主之前困惑的问题,主要是对整个链路不够了解,真正搞清楚需要站在application的角度。一个工具库发布完之后并不代表最终使用的形式,最终形式还得看应用bundle完之后。
application本身依赖的dependencies 以及 依赖的依赖 最终都会被打包工具替换成真实的物理地址
can not use import statement outside the module
这个算是比较常见的error, 主要是因为库作者没有对源代码进行ESM转译或者没有指向正确的入口文件,所以导致使用方在import的时候出现这个error,关于指向正确的入口文件,参考这篇
Leave a comment