简单来说,我这边前端和服务器都用到了一块逻辑代码,然后我图方便把它提出来作为 npm 包,一处更改前后都能使用。但是:
- 前后端都是 typescript
- 前端工程是 es module 发布类网页应用,后端工程是 node 的 commonjs
- 前端不支持 bigint ,后端支持
- 前端查了一下 JSBI 可以 babel 导出时选择替换为 bigint
- 于是我查了一下找到个 hybrid npm 包的 package.json 写法,就是 esm -> import ,cjs -> require 分开填写
- 问题又来了,babel 导出的 bigint 的 .d.ts 和 tsc 导出的 JSBI 的 .d.ts 并不一致,并且如果想两边使用方便,确实前端不能看到 bigint 后端不能看到 JSBI
- 然后我又再起了个 npm 包,把 JSBI 套了一层,在工具类里面处理导出,自己 type 了个 BI 类型,不会暴露出 JSBI 或者 bigint
- 当然逻辑模块引用工具类的 npm 包时又循环到上面的问题了,公共代码引用方式相同,同一个包,如何用的时候导入命令相同,比如都是
import { BIEx, BI } from 'jsbi-extension';但是在不同“语境”下代表的东西不同?
我不知道我表述清楚没有,最后我的临时解决方案是自己造的这个 jsbi 的套壳起了俩分枝,在公共逻辑模块 build esm/cjs 时分别引用不同的分支,但...感觉各种别扭...请问这种情形的标准解决方案是什么?
我造的 JSBI 坑在这 https://github.com/darklinden/jsbi-extension 后来想了下也只是因为我这是前后端 esm 和 cjs 的不同才只有两个分支...如果是做成通用的...岂不是要 4 个分支?