调试NodeJS + ES6应用程序(Webstorm)

时间:2015-03-20 15:47:55

标签: node.js webstorm ecmascript-6 babeljs

我想在客户端和服务器端都使用ES6。当然,我可以从babel-node src/app.js这样的终端启动我的NodeJS服务器,但它无法进行调试。

另一方面,Webstorm 9声称它支持ES6,但当我尝试启动默认的Node配置时,它会抱怨a => a + 1功能。

问题:如何从Webstorm 9中启动NodeJS + ES6应用程序?

P.S。我使用Node 0.12。*版本 附:我也试过了this,但它也不适合我

4 个答案:

答案 0 :(得分:5)

我终于使用在WebStorm中工作的polyfill来调试转换后的代码,并且WebStorm与Babel的工作方式相当令人印象深刻。

按照WebStorm中配置FileWatcher的说明非常容易,它会自动转换您的es6代码: http://babeljs.io/docs/setup/#webstorm

绊倒我的步骤是让节点找到polyfill文件,所以我可以使用es6迭代器和生成器。 Babel网站说要在全球范围内安装Babel和polyfill:

npm install -g babel-es6-polyfill

但是当我在节点程序中添加时:

require("babel-es6-polyfill");

Node抛出了一个关于找不到库的异常。然后我将require路径更改为完整的完整路径:

require("/usr/local/lib/node_modules/babel-es6-polyfill/polyfill.js");

现在我可以使用调试器逐步完成转换后的代码!

答案 1 :(得分:3)

您可以使用以下gulp babel任务将es6文件编译为es5。生成的文件将保存在dist目录中。在原始es6文件中放置一个断点,例如。 app.js并为生成的文件启动调试会话,即。 dist / app.js(因为节点无法运行es6文件)。原始文件中的断点将被命中。

var gulp = require('gulp'),
    sourcemaps = require('gulp-sourcemaps'),
    babel = require('gulp-babel'),
    path = require('path'),
    gutil = require('gulp-util');

// Compile ES6 to ES5
gulp.task("babel", function () {
    return gulp.src('**/*.js')
        .pipe(sourcemaps.init())
        .pipe(babel())
        .on('error', gutil.log)
        .pipe(sourcemaps.write('.', {
            includeContent: false,
            sourceRoot: function(file) {
                return path.relative(file.path, __dirname);
            }
        }))
        .pipe(gulp.dest('dist'));
});

答案 2 :(得分:1)

是的,你可以。请点击此链接http://blog.jetbrains.com/webstorm/2015/05/ecmascript-6-in-webstorm-transpiling/。我的看法是完整的ES6调试支持应该是无缝的,但它在Webstorm中尚未完全实现。我相信它会变得更好。该博客提供了一个可行的解决方案。也就是说,我宁愿在node-inspector ...和Chrome DevTools for React中进行调试。

答案 3 :(得分:0)

最后我找到了答案here。我做了npm install babel并在主节点文件(require('babel/register'))的开头添加了app.js

现在我真的可以从Webstorm启动/调试用ES6编写的Node应用程序。但调试是非常奇怪的 - 看起来像以前没有工作的代码知道。 Intellij debuger说我的所有变量都是未定义的。还有an article关于另一个可能的问题。

实施例:enter image description here

对内部循环for (var i = 1; i < trs.length; i++) {变量i考虑undefined的内容有什么看法!