如何在ECMAScript 6中导入模块?

6
我想在 ECMAScript 6 中将不同的模块导入到我的模块中。 例如:
import rest from 'rest';

export function client() {

    // some logic

}

如果我将导入语句改为经典模式:
var rest = require('rest');

一切正常工作。有什么想法吗?


只有在导入的模块具有默认导出时,才能使用import foo from ...。您需要了解的所有内容都应包含在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import中。 - Felix Kling
谢谢你,Felix,你是正确的! - Ma Kro
2个回答

1
我不是专家,但是importrequire在很多方面相似,但主要区别在于:
  • 您可以使用import选择性地导入项目(猜测这与python接近),但是使用require时,您只能将单个模块作为命名空间导出,其他所有内容都是其子模块。

  • 第二个是,require更多的是node.js的东西(尽管您可以使用browserify将其引入浏览器),但import现在是ES6的本地功能,即支持ES6的浏览器将支持import

来自lukehoban的示例es6features以加强我的第一点:

// lib/math.js
export function sum(x, y) {
  return x + y;
}
export var pi = 3.141593;

// app.js
import * as math from "lib/math";
alert("2π = " + math.sum(math.pi, math.pi));

// otherApp.js
import {sum, pi} from "lib/math";
alert("2π = " + sum(pi, pi));

//Some additional features include export default and export *:

// lib/mathplusplus.js
export * from "lib/math";
export var e = 2.71828182846;
export default function(x) {
    return Math.log(x);
}

// app.js
import ln, {pi, e} from "lib/mathplusplus";
alert("2π = " + ln(e)*pi*2);

我知道它是这样工作的,但我的问题是我想在 lib/math.js 中使用 import(就像你的例子一样)。 我在其他文件中使用了 imports,但在其他文件中,我有类。这里有一个被导出的单个函数,我想在那个函数中使用其他模块。可惜这行不通。 - Ma Kro

1
这是我的问题的答案,但如果您想了解如何导入其他文件,请参考用户@mido给出的答案,或者例如查看此页面:http://www.2ality.com/2014/09/es6-modules-final.html 所以来自@Felix King的评论为我指明了正确的答案。 正如Felix建议的那样,rest模块没有默认导出函数,因此应该像这样导入:
import * as rest from 'rest';

因此,它取决于模块的编写方式。例如,REST中包含的“mime”拦截器模块可以通过以下方式包含:

import mime from 'rest/interceptor/mime';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接