在 ES6 中使用导入

Node.js 是针对现代版本的 V8 构建的。通过及时了解该引擎的最新版本,我们确保及时向 Node.js 开发人员提供 JavaScript ECMA-262 规范的新功能,以及持续的性能和稳定性改进。

所有 ECMAScript 2015(ES6) 功能分为三组,用于发货,暂存和进行中的功能:

V8 认为稳定的所有运输功能在 Node.js 上默认打开,不需要任何类型的运行时标志。分阶段的功能,几乎完成的功能,V8 团队认为不稳定,需要运行时标志: - 和谐。正在进行的功能可以通过各自的和声标志单独激活,但除非出于测试目的,否则这是非常不鼓励的。注意:这些标志由 V8 公开,并且可能会在没有任何弃用通知的情况下更改。

目前 ES6 原生支持 import 语句。请参阅此处

所以,如果我们有一个名为 fun.js 的文件……

export default function say(what){
  console.log(what);
}

export function sayLoud(whoot) {
  say(whoot.toUpperCase());
}

…如果有另一个名为 app.js 的文件,我们想要使用我们之前定义的函数,有三种方法可以导入它们。

导入默认值

import say from './fun';
say('Hello Stack Overflow!!');  // Output: Hello Stack Overflow!!

导入 say() 函数,因为它被标记为源文件中的默认导出(export default …

命名为导入

import { sayLoud } from './fun';
sayLoud('JS modules are awesome.'); // Output: JS MODULES ARE AWESOME.

命名导入允许我们准确导入我们实际需要的模块部分。我们通过明确命名它们来做到这一点。在我们的例子中,通过在 import 语句中用大括号命名 sayLoud

绑定导入

import * as i from './fun';
i.say('What?'); // Output: What?
i.sayLoud('Whoot!'); // Output: WHOOT!

如果我们想要拥有一切,那么这就是要走的路。通过使用语法* as i,我们有 import 语句为我们提供了一个对象 i,它将我们的 fun 模块的所有导出保存为相应命名的属性。

路径

请记住,即使要导入的文件与使用 ./导入的文件位于同一目录中,也必须将导入路径明确标记为相对路径。从没有固定的路径导入,如

import express from 'express';

将在本地和全局 node_modules 文件夹中查找,如果找不到匹配的模块,将抛出错误。