Nodes.js 22 带来的重大收益
Node.js 22 放宽了 CommonJS 模块和 ESM 模块的互操作限制。允许在 CommonJS 模块通过 require("esm modules") 导入 ESM 文件。 但是在 esm 文件中存在顶层的 await ,则不允许使用 require() 导入。
这个特性带来的重大意义:大部分 NPM 包可以不用再提供 CommonJS 和 ESM 的产物,只提供 ESM 产物即可。ESM 产物已经被大部分浏览器所支持。 未来工程化可能会越来越简单了。
- 执行 package.json 中的脚本
- 功能:新增实验性功能,通过 CLI 标志 noderun -- <script-in-package-json> 执行 package.json 中的脚本。
- 示例:node --run test 将执行 package.json 中的 test 命令。
TypeScript 5.8 的支持
- --module nodenext 标志:
- TypeScript 5.8 引入了 --module nodenext 标志。
- 当启用该标志时,TypeScript 不会报错,允许 CommonJS 文件通过 require() 导入 ESM 文件。
- 注意事项:
- 由于此特性可能被回溯到旧版本的 Node.js,目前没有稳定的 --module nodeXXXX 选项支持此行为。
- 未来版本的 TypeScript 可能会在 node20 下稳定支持此特性。
- 建议:
- 使用 Node.js 22 或更高版本的用户应启用 --module nodenext。
- 使用旧版本 Node.js 的用户应继续使用 --module node16 或更新到 --module node18。