NPM 包未来趋势是用 ES Module 吗

2022-06-05 19:32:45 +08:00
 iqoo

发现很多常用库的最新版本只能使用 ES Module 引用,比如 get-port 、node-fetch 等,这个是未来的趋势吗?

3907 次点击
所在节点    程序员
19 条回复
learningman
2022-06-05 20:17:43 +08:00
不太可能,python2 到 3 用了 12 年,放弃 cjs 的代价只会更大,毕竟 npm 那个递归引用设计。。。
Kaciras
2022-06-05 20:34:42 +08:00
是的
zhuweiyou
2022-06-05 20:45:49 +08:00
浏览器端是, 服务端不太可能
ChrisFreeMan
2022-06-05 20:55:58 +08:00
不用怀疑,就是未来趋势,本就是为了解决 cjs 的痛点
DOLLOR
2022-06-05 21:03:51 +08:00
如果是 TS 的话一律用 ESM 就完事了,编译的时候可以根据需要,自行选择输出为 ESM 、CJS 、AMD 、UMD 格式。
makelove
2022-06-05 21:31:11 +08:00
不是未来趋势,而是已是现实
不过好在转了 esm 后还是能用 cjs 的,只不过只能整个引入模块,稍稍不方便一点点
CoverL
2022-06-05 22:31:00 +08:00
cdn 服务都开始支持了
beginor
2022-06-05 22:48:31 +08:00
浏览器都支持了,esm 肯定是标准的标准
duan602728596
2022-06-05 23:52:46 +08:00
是的。而且 esm 引入 cjs 模块的成本不大,cjs 通过 import()仍然可以引入 esm 模块。
Zwying
2022-06-05 23:59:40 +08:00
node_module 这个黑洞迟早被淘汰
molvqingtai
2022-06-06 01:48:52 +08:00
是的,现在构建工具都依赖 esm 实现 no-bundle ,比如 vite
Inocr
2022-06-06 08:07:09 +08:00
@DOLLOR TS 在 Node 端使用 ESM ,相对路径需要加上 .js ,目前还是很不友好的

```
relative import paths need full extensions (we have to write import "./foo.js" instead of import "./foo")
```
wangtian2020
2022-06-06 08:43:16 +08:00
只有我一个现在是 Nodejs 用 点 mjs 文件写吗?
makelove
2022-06-06 09:04:46 +08:00
@Inocr 并不需要加.js ,都是运行时在命令行上加 --es-module-specifier-resolution=node ,这样和原来不样不用.js 。 加.js 是麻烦,因为和前端不能共用文件了(或需要特别配制)。
Inocr
2022-06-06 09:34:26 +08:00
@makelove 好吧,当时一看提示 ExperimentalWarning ,就有点怵,毕竟要上生产。那就只有个 tsconfig paths alias 需要解决下了,谷歌了很方案,都没有找到合适,不过这个问题倒不是很大,改成相对路径就好
xling
2022-06-06 09:38:38 +08:00
加"type"="module"就行了,现在 nodejs 的 lts 版本已经是 16 了
libook
2022-06-06 10:47:45 +08:00
个人认为,主流场景下,建议以 ECMAScript 官方标准为导向,官方出了 ESM ,将来大方向就是逐渐迁移到 ESM ,如果 ESM 本身不完善,那么就肯定会去完善 ESM 本身,毕竟 ES 标准迭代挺快的。
moen
2022-06-06 17:16:20 +08:00
deno 默认 esm 就可以 top-level await ,用 node 的时候不改 esm 模式都不舒服
zhouyg
2022-06-06 18:10:22 +08:00
是的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/857413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX