如何设置节点环境来运行涉及`import ... from ...`等语法的ES6代码?

时间:2016-07-06 14:03:18

标签: javascript node.js d3.js babeljs

我想根据source code here运行以下代码,其中包含一些ES6语法,如import ... from ...

import rgb from "./rgb";
import array from "./array";
import date from "./date";
import number from "./number";
import object from "./object";
import string from "./string";
import constant from "./constant";

var interpolateValue = function(a, b) {
// set var t and c
  var t = typeof b, c;

// if b is null or t is type boolean, 
  return b == null || t === "boolean" ? constant(b)
      : (t === "number" ? number
      : t === "string" ? ((c = color(b)) ? (b = c, rgb) : string)
      : b instanceof color ? rgb
      : b instanceof Date ? date
      : Array.isArray(b) ? array
      : isNaN(b) ? object
         // (a,b) is 2 function args
      : number)(a, b);
}

console.log(interpolateValue("foo", "bar")(0.5));

我尝试在d3.js作为依赖项的节点项目中运行此代码。但是,我收到了指向控制台中import的以下错误:

SyntaxError: Unexpected reserved word
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:373:25)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)
    at node.js:968:3

我的问题

  1. 如何逐步设置节点环境以使用ES6语法运行代码?
    1. 在第一个答案的帮助下,我设法成功运行环境(细节可以在第二个解决方案中找到),但编译速度似乎很慢。有谁知道为什么?
    2. 谢谢!

2 个答案:

答案 0 :(得分:1)

是的,你需要巴贝尔。你有没有在这里查看文档: https://babeljs.io/docs/setup/#installation

$ npm install --save-dev babel-core

然后:

require("babel-core").transform("code", options);

之后确保您已设置.babelrc文件:

{
  "presets": ["es2015"]
}

希望有所帮助!

答案 1 :(得分:0)

正如@abigwonderful所指出的那样,babel网站提供了设置环境以将ES6代码转换为ES5的方法。以下是我现在觉得很舒服的解决方案。

  1. 创建一个目录并在其终端运行npm init;
  2. 移动此目录的终端运行npm install --save-dev PackageName以获取以下软件包:browserifybabel-clibabelifybabel-preset-es2015;
  3. 运行npm install --save d3;
  4. 运行echo '{ "presets": ["es2015"] }' > .babelrc;
  5. 到现在为止,env已全部设定。当您的scritp.js准备好后,在终端运行./node_modules/.bin/babel-node script.js
  6. 似乎很慢,因为brackets警告项目中有超过30,000个文件,其中一些功能将被禁用。也许出于类似的原因,这种方法起作用但对我来说似乎很慢。有谁知道为什么以及如何解决它?

    谢谢!