В 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.
Приносим извинения за слабые ссылки на путеводитель по Футураме и автостопщику :)