【问题标题】:"Import" ES6 for Node为节点“导入”ES6
【发布时间】:2015-06-16 21:16:24
【问题描述】:

我想使用 ES6 中的 import 而不是 Node 中的 common.js 中的 require。 出于某种原因,我认为 import 默认情况下会在 Node.js 中工作。但看起来并没有。我需要安装一些 npm 包才能使其正常工作吗?

【问题讨论】:

  • 如果你使用的是纯节点js,那就是ES5。你需要 babel 或 io.js 来获得 ES6 特性。
  • 我有 0.12.4 版本的节点。我试过 es6-module-loader 但没有用。我会试试 babel 和 io
  • io.js 也没有对 ES6 模块的原生支持,Babel 将使用 System.js,它使用 es6-module-loader 作为其核心。

标签: javascript node.js ecmascript-6


【解决方案1】:

Node.js 目前不原生支持 ES6 模块。您需要使用单独的包来实现此行为。

事实上的标准是es6-module-loader,它可以在浏览器和 Node 环境中使用。

Babel.js 使用System.js,它的核心使用es6-module-loader。如果它对您不起作用,则可能是您的实施存在问题。

【讨论】:

  • 我的智能感知告诉我导入的是 ES6 功能,您当前的语言级别是 ES5。如何更改我当前的语言水平。现在我有 babel 和 es6-module-loader。我想我只需要其中之一。但不足以让我的节点成为 es6
  • Node.jsio.js 都支持 一些 ES6 特性,但 ES6 模块不是这些特性之一。我什至不确定它是否已在 V8 引擎中实现。确实存在的是规范或它应该如何工作的语法。 es6-module-loader 实现了该语法。你可以在Node.js 中使用--harmony 标志和io.js 中的ES6,但这不包括ES6 模块。
  • 我是 babel 新手,所以我可能做得不对。我在packages.json中有“build”:“rm -rf lib && babel src --out-dir lib”。不知道你是怎么调用的?我猜使用 npm build?
  • 是的,如果运行npm build,它应该运行您在package.json 中作为build 的值输入的任何命令
  • 所以当我这样运行它时,它没有给我任何输出。我猜它跑了。但我期待它的某种输出。顺便说一句,您不需要在项目之外安装 babel 来执行此操作吗?仅仅在你的项目中安装 babel 模块就足以转换你的 lib 文件夹了吗?因为如果我查看我的命令,它正在尝试从命令行运行 babel。但是,如果我只是输入 babel,我的系统上将无法识别该命令。
【解决方案2】:

您可以将 ES6 用于您的 Node.js 文件,但您应该像使用 React.js 组件一样将它们转换为 ES5。

可能任何代码,你想用 ES6 编写,你必须使用 babel 转译成 ES5。

看看我的"MERN Heroku starter kit"

【讨论】:

    【解决方案3】:

    使用 node 你可以传递一个启用某些 ES6 功能的 --harmony 标志:

    node index.js --harmony
    

    但我不确定导入是否在这些功能之间。我真的建议使用将 es6 编译为 es5 的 babel,它真的很完整,Facebook 现在使用 babel for React 而不是他们自己的转译器,您还可以使用一些很酷的 ES7 功能,例如 await/async

    【讨论】:

    • import 和 ES6 模块不是 Node.js 的 ES6 实现的一部分
    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2016-06-07
    • 2016-06-07
    • 2017-01-06
    • 2021-02-05
    • 2020-08-24
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多