发现很多常用库的最新版本只能使用 ES Module 引用,比如 get-port 、node-fetch 等,这个是未来的趋势吗?
1
learningman 2022-06-05 20:17:43 +08:00
不太可能,python2 到 3 用了 12 年,放弃 cjs 的代价只会更大,毕竟 npm 那个递归引用设计。。。
|
2
Kaciras 2022-06-05 20:34:42 +08:00
是的
|
3
zhuweiyou 2022-06-05 20:45:49 +08:00
浏览器端是, 服务端不太可能
|
4
ChrisFreeMan 2022-06-05 20:55:58 +08:00
不用怀疑,就是未来趋势,本就是为了解决 cjs 的痛点
|
5
DOLLOR 2022-06-05 21:03:51 +08:00
如果是 TS 的话一律用 ESM 就完事了,编译的时候可以根据需要,自行选择输出为 ESM 、CJS 、AMD 、UMD 格式。
|
6
makelove 2022-06-05 21:31:11 +08:00
不是未来趋势,而是已是现实
不过好在转了 esm 后还是能用 cjs 的,只不过只能整个引入模块,稍稍不方便一点点 |
7
CoverL 2022-06-05 22:31:00 +08:00
cdn 服务都开始支持了
|
8
beginor 2022-06-05 22:48:31 +08:00 via Android
浏览器都支持了,esm 肯定是标准的标准
|
9
duan602728596 2022-06-05 23:52:46 +08:00
是的。而且 esm 引入 cjs 模块的成本不大,cjs 通过 import()仍然可以引入 esm 模块。
|
10
Zwying 2022-06-05 23:59:40 +08:00 1
node_module 这个黑洞迟早被淘汰
|
11
molvqingtai 2022-06-06 01:48:52 +08:00
是的,现在构建工具都依赖 esm 实现 no-bundle ,比如 vite
|
12
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") ``` |
13
wangtian2020 2022-06-06 08:43:16 +08:00
只有我一个现在是 Nodejs 用 点 mjs 文件写吗?
|
14
makelove 2022-06-06 09:04:46 +08:00
@Inocr 并不需要加.js ,都是运行时在命令行上加 --es-module-specifier-resolution=node ,这样和原来不样不用.js 。 加.js 是麻烦,因为和前端不能共用文件了(或需要特别配制)。
|
15
Inocr 2022-06-06 09:34:26 +08:00
@makelove 好吧,当时一看提示 ExperimentalWarning ,就有点怵,毕竟要上生产。那就只有个 tsconfig paths alias 需要解决下了,谷歌了很方案,都没有找到合适,不过这个问题倒不是很大,改成相对路径就好
|
16
xling 2022-06-06 09:38:38 +08:00
加"type"="module"就行了,现在 nodejs 的 lts 版本已经是 16 了
|
17
libook 2022-06-06 10:47:45 +08:00
个人认为,主流场景下,建议以 ECMAScript 官方标准为导向,官方出了 ESM ,将来大方向就是逐渐迁移到 ESM ,如果 ESM 本身不完善,那么就肯定会去完善 ESM 本身,毕竟 ES 标准迭代挺快的。
|
18
moen 2022-06-06 17:16:20 +08:00 1
deno 默认 esm 就可以 top-level await ,用 node 的时候不改 esm 模式都不舒服
|
19
zhouyg 2022-06-06 18:10:22 +08:00
是的
|