В 22seven мы ранее принимали решение перенести некоторые из наших проектов Node с помощью Babel, что позволило нам использовать современный синтаксис JavaScript.

Поскольку последняя версия Node в настоящее время поддерживает большую часть спецификации ECMAScript 2015 (ES6), мы поняли, что нам больше не нужен перенос на ES5.

Транспиляция плохая. В некоторых случаях это неизбежное зло, но избегайте его, если можете. Это добавляет довольно много накладных расходов с точки зрения компиляции, исходных карт и других проблем с отладкой. И приятно запускать в рабочей среде тот же код, который вы на самом деле написали!

Итак ... во время праздничного перерыва, которое для нашей компании было более спокойным временем, мы решили устроить ему треп.

Всем хорошие новости!

Через пару часов приложение было запущено без транспиляции, Woohoo!

Итак, что нам нужно было изменить? Немного:

  • import синтаксис для require, fyi уничтожение работает с require
// with transpilation
import { createStore } from 'redux';
// without transpilation
const { createStore } = require('redux');
  • export синтаксис для module.exports
// with transpilation
export default function sayHello() {}
// without transpilation 
module.exports = function sayHello() {}
  • завершающие запятые (свисающие запятые) в function параметрах необходимо удалить
// with transpilation
function sayHello(
  name, 
  surname,
) {}
// without transpilation 
function sayHello(
  name, 
  surname
) {}

Вот и все. Если вы разбираетесь в макросах или регулярных выражениях, это может быть еще быстрее. Visual Studio Code и Atom поддерживают редактирование в нескольких местах, что также отлично работает.

Вам будет так просто? Это зависит от того, сколько синтаксиса, отличного от ECMAScript 2015 (ES6), вы используете, я уже видел некоторых разработчиков, использующих синтаксис async. Если вы это сделаете, я предлагаю использовать co, который имитирует async код (чтение сверху вниз) и удаляет вложенные обратные вызовы, он также использует обещания, которые помещают ваш код в удобное место для async, когда он становится доступным.

Хотя мы собираемся пропустить import, поскольку мы используем его в наших проектах React Native, похоже, что мы немного рано приняли синтаксис.
Похоже, это будет подтверждено только в ECMAScript 2017.

Чтобы получить более подробную информацию о точной поддержке спецификаций ECMAScript, ознакомьтесь с node.green, который является версией знаменитой таблицы совместимости kangax, ориентированной на узлы.

Если вы любите приключения, вы можете включить флаги Поэтапный и Выполняется для узла, чтобы получить некоторые функции ECMAScript 2016+, подробнее см. Nodejs.

Приносим извинения за слабые ссылки на путеводитель по Футураме и автостопщику :)