Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] artus 的默认运作模式选择 esm or cjs #179

Open
DuanPengfei opened this issue Aug 19, 2022 · 11 comments
Open

[RFC] artus 的默认运作模式选择 esm or cjs #179

DuanPengfei opened this issue Aug 19, 2022 · 11 comments

Comments

@DuanPengfei
Copy link
Collaborator

DuanPengfei commented Aug 19, 2022

现在有三个选项:

  • 官方只支持 esm
  • 官方只支持 cjs
  • 同时提供 cjs & esm 支持

值得注意的是,第三个选项看起来美好,但是从长期看是给 artus 生态的可维护性挖坑

@atian25
Copy link
Member

atian25 commented Aug 19, 2022

关键还是 Node.js 官方没能给出指引,导致社区类库开发者很混乱。
目前看来可能的选择就是 TS 写,然后同时编译为 2 个。

nodejs/node#33954
whatwg/html#5572

https://github.com/esm2cjs
nodejs/node#44186

@DuanPengfei
Copy link
Collaborator Author

关键还是 Node.js 官方没能给出指引,导致社区类库开发者很混乱。 目前看来可能的选择就是 TS 写,然后同时编译为 2 个。

nodejs/node#33954 whatwg/html#5572

https://github.com/esm2cjs nodejs/node#44186

这种就很精神分裂

@hyj1991
Copy link
Member

hyj1991 commented Aug 22, 2022

我投 esm 一票,框架直接导出 esm,可以有效避免基于 require 和 js 原型链的 monkey patch 这种 hack,增加框架逻辑的可信度

@atian25
Copy link
Member

atian25 commented Aug 29, 2022

我再想了想,还是面向未来吧,我们只编译为 esm 吧,不要同时兼容。
不然一方面我们的维护成本很大,有很多类似 __dirname 和 import.meta 的兼容。
另一方面,用户也很痛苦,像 sindresorhus 的很多库都没法用最新版本了。

而且我们 artus 是 runtime 运行时,一般不会被人 import。

@XadillaX
Copy link
Member

ESM 有个问题,用户如果 require 就很痛苦...

@hyj1991
Copy link
Member

hyj1991 commented Aug 29, 2022

ESM 有个问题,用户如果 require 就很痛苦...

官方可以明确只提供 esm 的编程界面的良好支持

@hyj1991 hyj1991 changed the title [RFC] Artus 是不是应该以身作则,默认 esm 来推广 [RFC] Artus esm or cjs 的运作模式选择 Aug 29, 2022
@atian25
Copy link
Member

atian25 commented Aug 29, 2022

ESM 有个问题,用户如果 require 就很痛苦...

artus 的用户应该都是用 TS 来写了,他为啥要 require ? 他也不需要关注编译目标怎么选择,无脑 esm 就好了。

@hyj1991 hyj1991 changed the title [RFC] Artus esm or cjs 的运作模式选择 [RFC] artus 的默认运作模式选择 esm or cjs Aug 29, 2022
@hyj1991
Copy link
Member

hyj1991 commented Aug 30, 2022

2022-08-30 飞书视频会议结论:

  • @artus/core 继续保留 cjs 和 esm 两种导出方式
  • 修改 build 脚本,通过在 package.json 中定义 exportsimports 来进行两种模块的支持

@fengmk2
Copy link
Member

fengmk2 commented Aug 31, 2022

竟然选了一条最难走的路。

1 similar comment
@DevXiaolan
Copy link
Contributor

竟然选了一条最难走的路。

@DevXiaolan
Copy link
Contributor

实际上我们发现, 如果是作为 framework ,就优先用esm ,因为esm 尚且有办法用cjs;而作为 lib 的话就用 cjs ,因为 cjs 谁都能用。
所以总的来说还是看自己的定位。
当然希望node官方给个明确的指示。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants