我想在客户端和服务器端都使用ES6。当然,我可以从babel-node src/app.js
这样的终端启动我的NodeJS服务器,但它无法进行调试。
另一方面,Webstorm 9声称它支持ES6,但当我尝试启动默认的Node配置时,它会抱怨a => a + 1
功能。
问题:如何从Webstorm 9中启动NodeJS + ES6应用程序?
P.S。我使用Node 0.12。*版本 附:我也试过了this,但它也不适合我
答案 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关于另一个可能的问题。
实施例:
对内部循环for (var i = 1; i < trs.length; i++) {
变量i
考虑undefined
的内容有什么看法!