使用ESM模块

使用ESM模块

廖雪峰

资深软件开发工程师,业余马拉松选手。

虽然Node.js从诞生起就支持模块,但JavaScript语言本身长期以来却一直没有模块功能,只能由CommonJS或其他AMD等模块系统来“模拟”。

随着ES 6标准的推出,JavaScript语言本身终于也迎来了原生内置的模块支持,称为ECMAScript Modules(简称ESM),不仅可以直接在浏览器中使用模块,也可以在Node.js中使用ESM模块。

不使用ESM模块时,我们用module.exports导出可供外部使用的JS对象,例如,以下模块导出了两个函数:

'use strict';

let s = 'Hello';

function out(prompt, name) {

console.log(`${prompt}, ${name}!`);

}

function greet(name) {

out(s, name);

}

function hi(name) {

out('Hi', name);

}

module.exports = {

greet: greet,

hi: hi

};

要把上述代码改为ESM模块,我们用export标识需要导出的函数:

let s = 'Hello';

// out是模块内部函数,模块外部不可见:

function out(prompt, name) {

console.log(`${prompt}, ${name}!`);

}

// greet是导出函数,可被外部调用:

export function greet(name) {

out(s, name);

}

// hi是导出函数,可被外部调用:

export function hi(name) {

out('Hi', name);

}

并将其保存为hello.mjs文件,注意扩展名不是.js,而是.mjs。

可以再编写一个main.mjs文件来调用hello模块:

import { greet, hi } from './hello.mjs';

let name = 'Bob';

greet(name);

hi(name);

可见,ESM模块用export关键字导出一个JS对象,用import关键字导入一个模块的导出对象。

如果要实现类似如下代码的单个函数导出:

module.exports = greet;

则可以用export default导出:

export default function greet(name) {

...

}

相应的,导入代码修改为:

import greet from './hello.mjs';

细心的同学还注意到ESM模块文件第一行并没有'use strict',这是因为ESM模块默认启用严格模式,因此无需再手动声明'use strict'。

浏览器加载ESM

对于浏览器来说,也可以直接使用ESM模块。当我们加载一个ESM模块时,需要用type="module"来表示:

...

或者直接使用import加载一个模块:

...

练习

在Node环境中使用ESM模块:

下载练习

小结

使用JavaScript内置的原生模块时,用关键字export和import来实现导出与导入;

ESM模块默认启用strict模式,无需声明'use strict'。

相关推荐

瑞士世界杯历史战绩及最佳排名
必发365手机app

瑞士世界杯历史战绩及最佳排名

07-18 👁️ 6109
android麦克风设置在哪,手机麦克风设置实用教程
365bet体育注册开户

android麦克风设置在哪,手机麦克风设置实用教程

07-13 👁️ 6190
如何在家剪头发:12种方法
365bet体育注册开户

如何在家剪头发:12种方法

07-22 👁️ 2139
越南足协主席:如果越南想参加世界杯,得有支强大的年轻队伍
如何选择适合你的主机游戏配置?详解主机游戏所需硬件及最佳挑选建议
《鬼谷八荒》仙祠位置一览
必发365手机app

《鬼谷八荒》仙祠位置一览

06-30 👁️ 6336