ES2015“ import”在节点 v6.0.0中无法使用 with —— Harmony_module 选项

我正在使用节点 v6.0.0,并希望使用 ES2016(ES6)。然而,我意识到“导入”语法不起作用。在 ES2015中编写模块化代码,“导入”不是最基本的吗?我也尝试用 --harmony_modules选项运行节点,但仍然得到相同的“导入”错误。这是密码。

没有“ import”的工作代码:

'use strict';
let sum = 0;
class Number {


addNumber(num1, num2) {
return num1 + num2;
}
}
let numberObj = new Number();
sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

不使用带有“ import”的代码:

Server.js

'use strict';
import Number from "./Number";


let sum = 0;




let numberObj = new Number();


sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

数字 J

'use strict';
export default class Number {


addNumber(num1, num2) {
return num1 + num2;
}
}

我还检查了 http://node.green/,以查看受支持的 es6,但是不能理解为什么它不能与—— Harmony _ module 选项一起工作。请帮帮我。

74019 次浏览

只是还没有实施。

Node 6.0.0使用 V8版本,完成了大部分 ES6特性。遗憾的是,模块不是那些已完成的特性之一。

node --v8-options | grep harmony

进行中 和谐旗帜没有完全实施,通常不起作用:

—— es _ stage (启用值得测试的和谐特性(只供内部使用))
--和谐(使所有完整的和谐特征成为可能)
—— Harmony _ Shipping (启用所有已发布的 Harmony 特性)
—— Harmony _ object _ Observer (启用“ Harmony Object.Observer”(正在进行中))
- Harmony _ module (启用“ Harmony 模块”(正在进行中))
—— Harmony _ function _ sent (启用“ Harmony function. sent”(正在进行中))
—— Harmony _ share darraybuffer (启用“ Harmony share darraybuffer”(正在进行中))
—— Harmony _ simd (启用“ Harmony simd”(正在进行中))
—— Harmony _ do _ expression (启用“ Harmony do-expression”(正在进行中))
—— Harmony _ iterator _ close (启用“ Harmony iterator finalization”(正在进行中))
—— Harmony _ tail 调用(启用“ Harmony tail 调用”(正在进行中))
—— Harmony _ object _ values _ entry (启用“ Harmony Object.values/Object.entry”(正在进行中))
—— Harmony _ object _ own _ property _ description (启用“ Harmony Object.getOwnPropertyDescriptors ()”(正在进行中))
—— Harmony _ regexp _ property (启用“ Harmony unicode regexp 属性类”(正在进行中))
—— Harmony _ Function _ name (启用“ Harmony 函数名推断”)
—— Harmony _ regexp _ lookbehind (启用“ Harmony regexp lookbehind”)
—— Harmony _ properties (启用“ Harmony Symbol.種”)
—— Harmony _ instanceof (启用“ Harmony instanceof support”)
—— Harmony _ default _ properties (启用“ Harmony default 旦参数”)
—— Harmony _ destructualAsmit (启用“ Harmony destructualAsmit”)
—— Harmony _ destructurebind (启用“ Harmony destructurebind”)
—— Harmony _ toString (启用“ Harmony toString”)
—— Harmony _ regexps (启用“ Harmony 正则表达式扩展”)
—— Harmony _ unicode _ regexp (启用“ Harmony unicode regexp”)
—— Harmony _ Sloppy (启用“在邋遢模式下的 Harmony 特性”)
—— Harmony _ Sloppy _ let (启用“ Harmony let in Sloppy mode”)
—— Harmony _ Sloppy _ function (启用“ Harmony Sloppy function block scing”)
—— Harmony _ proxy (启用“ Harmony proxy”)
—— Harmony _ response (启用“ Harmony Refect API”)
—— Harmony _ regexp _ subclass (启用“ Harmony regexp 子类化”)

如上所述,ES6模块尚未实现。

以与 Common JS 模块向后兼容的方式实现 ES6模块似乎是一个非常重要的问题,Common JS 模块是当前的 Node.JS 模块语法。

但是,有一个实现的 草稿,它为包含 ES6模块的文件引入了一个新的文件扩展名 -.mjs

此外,还有一个 反建议提供了另一种方法,可以像下面这样声明所有具有 package.json 中的 ES6模块的文件:

{
"modules.root": "/path/to/es6/modules"
}

这应该是一个评论@Paulpro 的回答,但我没有足够的名声发表评论。

对于 窗户用户,等效的命令是:

node --v8-options | findstr harmony

在模块实现之前,您可以使用 巴别塔的“传送器”来运行代码:

npm install --save babel-cli babel-preset-node6
./node_modules/.bin/babel-node --presets node6 ./your_script.js

参见 https://www.npmjs.com/package/babel-preset-node6https://babeljs.io/docs/usage/cli/

缺点 : 这有很多缺点,比如额外的编译时间,这可能非常重要,现在需要使用源映射进行调试;。