臨時 fork 了 一個 repo 解決 rollup-plugin-typescript2 + @betit/rollup-plugin-rename-extensions 無法並存 tslib.js 和 tslib.cjs 的問題。
在打包 library 時我並不喜歡使用像 tsdx 等 bundle 的方式,而是比較喜歡 preserveModules 保留原始結構,使用上能有更大的彈性。
目前為止 rollup-plugin-typescript2
是我認為打包效果較好的工具,可以保留原始結構,也能生成結構一致的 .d.ts
,並且對 tslib 進行 tree shaking 並放到 _virtual/_tslib.js
。
基於某些工具對 esm 支援仍不是很完美,我想同時打包 .js (esm) 和 .cjs 時,找到了個不錯的 @betit/rollup-plugin-rename-extensions 可以在 rollup build 時同時對副檔名進行調整,遺憾的是其依賴的 @rollup/pluginutils createFilter 並不支援 \0tslib.js
這種 facadeModuleId
,或是說根本是直接將之排除在外了,因此我 fork 了 @vdustr/rollup-plugin-rename-extensions 並加了一個 match option 來直接比對原始的 facadeModuleId
。
實際使用狀況的話可以參考這裡。
最後,我認為這只是暫時性的解法,目前只是先讓他能達到預期的效果而已,應該有更好更簡單的做法,歡迎大家來 Discord 群 一起交流。