我正在学习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等等。我对这些概念并不熟悉。感谢。
答案 0 :(得分:3)
有一个礼让,每年推广一个名为ECMA 2015(ES6),ECMA 2016(ES7),ECMA 2017(ES8)......的新javascript规范......
每个规范都描述了javascript必须具备的功能。
市场上存在多个javascript引擎:
等等
这些引擎试图达到标准,但不是100%兼容。
here您可以看到有关引擎和ES6的兼容性表。
您现在可以想象的问题是“为什么我要立即使用全新的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)
正如其他答案已经指出的那样,关键字import
和export
是实验性的。
这就是为什么我建议使用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;