使用文件的绝对路径时,babel-node 失败

babel-node fails, when using file's absolute path

import {
    Observable,
} from 'rx';
import {
  readFile,
} from 'fs';

let readFile_

readFile_ = Observable.fromNodeCallback(readFile)
readFile_(__dirname + '/my-app.js', 'utf-8')
  .subscribe(
    (text) => console.log(text),
    (err) => console.error(err)
  )

当我 运行 这个 ecma6 为 babel-node /home/sk/ws/rxjs-workshop-nov-2015/clcn-app/my-app.js 时,它因错误而失败,

/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transformation/file/options/option-manager.js:329
          throw new Error("Couldn't find preset " + JSON.stringify(val));
                ^
Error: Couldn't find preset "es2015"

但是当我 cd 到文件的父文件夹和 运行 babel-node my-app.js 时,它起作用了。

为什么babel-node有这个限制?

我认为问题是您没有全局安装预设 es2016

babel-node先在当前目录node_modules中查找,如果有none,则在父目录中查找,以此类推,查找全局node_modules 作为最后的手段。

您使用的是哪个版本的 Babel?

您似乎使用了 major API changes 附带的最新版本 6.0.0。原因是 Babel 不仅仅是一个 ES2015 转译器,而是一个平台。

无论如何,您现在需要特定的预设。 babel-preset-es2015 是让它工作的插件。

CLI 用法

babel-node --debug --presets es2015 -- script.js --debug

任务运行器

npm install --save-dev babel-preset-es2015 插件并将其添加到您的 .babelrc 文件中:

{
  "presets": ["es2015"]
}

可用预设列表:https://babeljs.io/docs/plugins/#presets