You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
现状
现在的编译流程是以 Bundle 模式下的 Rollup 插件为准,也就是说即使是在 Transform 模式下,会创建一个 pluginContainer,来模拟 Rollup 插件的运行流程,然后触发其中的 transform 方法。
这样的好处很清晰,就是可以复用 Rollup 插件。
而缺点是复杂度比较高,仅仅为了复用插件中 transform 这一个方法,就需要较为完整的模拟 Rollup 插件的流程,且需要跟随 Rollup 插件规范进行更新。如果后续切换 bundler,则也需要对这部分进行重构和优化。
重构
可以看到上面的核心问题不希望模拟 Rollup 这个插件的流程,且我们希望编译代码的这部分的结果和能力是统一的,自然而然有两种新的编译流程,分别是:
以 Transform 为核心
compile
方法,允许开发者自定义代码的编译能力compile
默认作用于 Transform,并通过 Rollup 插件的形式接入 Bundle 的流程中,后续 Bundle 流程的所有代码构建逻辑都将服用 Transform。保证两者是一致的。优势:
缺点:
以 Bundle 为核心
利用 Rollup 提供的 preserveModules 的方法实现 Transform 任务,整体上的优劣和之前保持一致,与上面的相反。
且因为和 bundler 强绑定,如果后续更换的 bundler 如果没有这个能力,那么就无法更换。
结尾
需要确定哪种方式,个人更加推荐以 Transform 为核心的编译流程。
本身 PKG 是作为库开发工具,以 Transform 为核心这种方式会更加符合开发者的心智模型。
相关内容
Beta Was this translation helpful? Give feedback.
All reactions