繁体   English   中英

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

[英]why export and import error in node.js 9?

我正在学习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等的信息。 我对这些概念不太熟悉。 谢谢。

每年都会推广一个新的JavaScript规范,称为ECMA 2015(ES6),ECMA 2016(ES7),ECMA 2017(ES8)...

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

市场上存在多个JavaScript引擎:

  • Google(和节点)的V8
  • 来自微软的Chakra
  • 来自Mozilla的Rhino

等等

这些引擎试图遵守规范,但并非100%兼容。

在这里,您可以看到有关引擎和ES6的兼容性表。

在此处输入图片说明


您现在可以想象的问题是:“为什么要立即使用全新的ES8?”。 有两个答案:要么等待node.js实施它,要么使用像Babel这样的编译器

Babel将您执行的代码转换为与node.js完全兼容的旧规范(ES5)。

例如,您要使用import (ES6功能)。 Babel会将您的import转换为require以便node.js可以执行它。

使用转译器非常有用且强大,因此您可以立即使用最后一个可提高开发人员团队生产力的功能。


就像@Tuan Anh Tran所说的那样,您可以使用一个标记对node.js进行运行以运行其实验性功能,这些功能代表其当前正在实现的功能(对于生产而言并不是特别安全)


是有关ES6功能的文章。

是有关ES7功能的文章。

这里介绍ES8的功能。

import是ESM关键字,处于实验阶段。 请参阅ESM 上的 Node.js 文档

如果您真的想使用它,则可以使用babel或使用--experimental-modules标志运行您的应用程序, --experimental-modules将文件.mjs扩展名

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

您的app.js

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

您的conf.js

let a = 1;
exports.a = a;

然后, node app.js将向控制台输出1

您需要安装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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM