为什么在node.js 9中导出和导入错误?

时间:2017-11-24 08:23:16

标签: javascript node.js

我正在学习javascript不久。我制作两个像波纹管的文件。 app.js:

import * as  Conf from './conf'
console.log(Conf.a)

conf.js:

export let a = 1

我只是在控制台中运行命令:

node app.js

错了。错误信息:

(function (exports, require, module, __filename, __dirname) { import * 
as Conf from './conf'

SyntaxError: Unexpected token import

谁能告诉我为什么?什么是关于javascript和babel等等。我对这些概念并不熟悉。感谢。

3 个答案:

答案 0 :(得分:3)

有一个礼让,每年推广一个名为ECMA 2015(ES6),ECMA 2016(ES7),ECMA 2017(ES8)......的新javascript规范......

每个规范都描述了javascript必须具备的功能。

市场上存在多个javascript引擎:

  • 来自谷歌(和节点)的V8
  • 来自microsoft的Chakra
  • 来自mozilla的Rhino

等等

这些引擎试图达到标准,但不是100%兼容。

here您可以看到有关引擎和ES6的兼容性表。

enter image description here

您现在可以想象的问题是“为什么我要立即使用全新的ES8?”。有两个答案:您要么等待node.js来实现它,要么使用转发器,如 Babel

Babel接受你所做的代码并将其转换为与node.js完全兼容的旧规范(ES5)。

例如,您想使用import这是一项ES6功能。 Babel会将您的import转换为require,因此node.js可以执行它。

使用转换器非常有用和强大,因此您可以立即使用提高开发团队效率的最后一项功能。

就像@Tuan Anh Tran所说,你可以使用一个标志来说明node.js来运行它的实验性功能,这些功能代表了它现在正在实现的功能(对于生产来说并不特别安全)

Here是一篇关于ES6功能的文章。

Here是一篇关于ES7功能的文章。

Here关于ES8功能。

答案 1 :(得分:0)

正如其他答案已经指出的那样,关键字importexport是实验性的。
这就是为什么我建议使用require()

您的 app.js

let conf = require("./conf");
console.log(conf.a);

conf.js

let a = 1;
exports.a = a;
然后

node app.js会将1打印到控制台。

答案 2 :(得分:0)

您需要安装Babel或其他转发器才能在NodeJS中使用ES6导入/导出。

您可以在此处找到Babel安装:https://babeljs.io/docs/setup/#installation

您也可以使用NodeJS模块加载系统。
文档:https://nodejs.org/api/modules.html

在你的情况下:

app.js

var conf = require('./conf');
console.log(conf);

conf.js

let a = 1;
module.exports = a;

或者

app.js

var conf = require('./conf');
console.log(conf.a);

conf.js

let a = 1;
exports.a = a;