Отладка приложения NodeJS + ES6 (Webstorm)
Я хочу использовать ES6 как на стороне клиента, так и на стороне сервера. Конечно, я могу запустить свой NodeJS-сервер из терминала, например babel-node src/app.js
, но это не позволяет отлаживать.
С другой стороны, Webstorm 9 утверждает, что он поддерживает ES6, но когда я пытаюсь запустить конфигурацию по умолчанию Node, он жалуется на функцию a => a + 1
.
Вопрос: Как запустить приложение NodeJS + ES6 из Webstorm 9?
P.S. Я использую версию Node 0.12. *
Постскриптум Я также пробовал этот, но он также не работает для меня
Ответы
Ответ 1
Наконец-то я получил отлаженную перекодированную копию кода с полиполками, работающими в WebStorm, и это действительно впечатляет, насколько хорошо WebStorm работает с Babel.
Было довольно легко следовать указаниям по настройке FileWatcher в WebStorm, который автоматически преобразует ваш код es6:
http://babeljs.io/docs/setup/#webstorm
Шаг, который меня опрокинул, получал node, чтобы найти файл polyfill, поэтому я мог использовать итераторы и генераторы es6. На веб-сайте Babel говорится о том, чтобы установить Babel и polyfill глобально:
npm install -g babel-es6-polyfill
Но когда я добавил в свою программу node:
require("babel-es6-polyfill");
Node бросил исключение из-за отсутствия библиотеки. Затем я изменил требуемый путь на полный путь:
require("/usr/local/lib/node_modules/babel-es6-polyfill/polyfill.js");
и теперь я могу использовать отладчик для выполнения переданного кода!
Ответ 2
Вы можете использовать следующую задачу gulp babel для компиляции ваших файлов es6 в es5. Сгенерированные файлы будут сохранены в каталоге dist. Поместите точку останова в исходный файл es6, например. app.js и начать сеанс отладки для сгенерированного файла, т.е. dist/app.js(поскольку node не удается запустить файлы 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'));
});
Ответ 3
Да, вы можете. Следуйте по этой ссылке http://blog.jetbrains.com/webstorm/2015/05/ecmascript-6-in-webstorm-transpiling/. Я считаю, что полная поддержка отладки ES6 должна быть плавной, но пока еще нет в Webstorm. Я уверен, что все станет лучше. Блог обеспечивает работоспособное решение. Тем не менее, я предпочел бы отлаживать node -инспектор... и Chrome DevTools for React.
Ответ 4
Наконец, я нашел ответ здесь. Я сделал npm install babel
и добавил require('babel/register')
в начале моего основного файла node (app.js
).
Теперь я действительно могу запустить/отладить node приложение, написанное с ES6 из Webstorm. Но эта отладка - это что-то очень странное - похоже, что код, который работал раньше, не работает. Intellij debuger говорит, что все мои переменные undefined. Также есть статья о других возможных проблемах.
Пример: ![enter image description here]()
Что заставляет задуматься, что внутри цикла for (var i = 1; i < trs.length; i++) {
переменная i
считается undefined
!