Node.js 的模块加载方法

概述
JavaScript 现在有两种模块。一种是 ES6 模块,简称 ESM;另一种是 CommonJS 模块,简称 CJS。

CommonJS 模块是 Node.js 专用的,与 ES6 模块不兼容。语法上面,两者最明显的差异是,CommonJS 模块使用require()和module.exports,ES6 模块使用import和export。

它们采用不同的加载方案。从 Node.js v13.2 版本开始,Node.js 已经默认打开了 ES6 模块支持。

Node.js 要求 ES6 模块采用.mjs后缀文件名。也就是说,只要脚本文件里面使用import或者export命令,那么就必须采用.mjs后缀名。Node.js 遇到.mjs文件,就认为它是 ES6 模块,默认启用严格模式,不必在每个模块文件顶部指定"use strict"。

如果不希望将后缀名改成.mjs,可以在项目的package.json文件中,指定type字段为module。

{
   "type": "module"
}

一旦设置了以后,该项目的 JS 脚本,就被解释成 ES6 模块。

# 解释成 ES6 模块
$ node my-app.js

如果这时还要使用 CommonJS 模块,那么需要将 CommonJS 脚本的后缀名都改成.cjs。如果没有type字段,或者type字段为commonjs,则.js脚本会被解释成 CommonJS 模块。

总结为一句话:.mjs文件总是以 ES6 模块加载,.cjs文件总是以 CommonJS 模块加载,.js文件的加载取决于package.json里面type字段的设置。

注意,ES6 模块与 CommonJS 模块尽量不要混用。require命令不能加载.mjs文件,会报错,只有import命令才可以加载.mjs文件。反过来,.mjs文件里面也不能使用require命令,必须使用import。

来自ECMAScript 6 入门

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简介: 主要介绍node.js中的模块化,以及es6模块化与node.js模块化这两个模块化的区别 1.node....
    Link9527阅读 843评论 0 10
  • JavaScript生态系统中,webpack作为捆绑我们代码的主要工具脱颖而出。但是,在我们深入研究webpac...
    me_967d阅读 853评论 0 0
  • 1. 官方入门的 Node.js 例子 app.js: 执行命令 node app.js 就可以直接运行起来,无需...
    RJ_Hwang阅读 1,503评论 0 2
  • 浏览器加载 传统方法 HTML 网页中,浏览器通过 标签加载 JavaScript 脚本。 默认情况下,浏览器是同...
    逆风飘游的鱼阅读 1,152评论 0 0
  • AMD CMD AMD、CMD 相对命比较短,到 2014 年基本上就摇摇欲坠了。 CommonJs requi...
    16325阅读 1,604评论 0 1

友情链接更多精彩内容