Можно ли использовать вавилонский узел в производстве


Я разрабатывал сайт, используя babel-node и browserify с преобразованием babelify, чтобы поддерживать синтаксис ES6.

мне просто интересно, могу ли я запустить это в производство как babel-node server скорее, чем node server Какие еще варианты у меня есть для запуска ES6 в узле?

Вот команды, которые я выполняю для сборки и запуска в разработке

// npm run build
browserify -t [babelify] client.js > public/js/bundle.js",

// npm start
babel-node server.js"

Вот мои зависимости от dev

"babel": "^4.0.1",
"babelify": "^5.0.3",
"browserify": "^8.0.3"
4   78  

4 ответа:

Для кода на стороне клиента Вы делаете правильную вещь. babelify это и отправить его клиенту.


Для кода на стороне сервера я бы просто сделал обычную сборку с использованием babel-cli

Согласно http://babeljs.io/docs/setup/#babel_register, babel-register не предназначен для производственного использования - требуемый крюк в первую очередь рекомендуется для простых случаев.

Для Вавилона 6+

По состоянию на Вавилон 6, по умолчанию никакие преобразования не включаются. Итак, давайте начнем с установки babel-cli и babel-preset-es2015.

$ npm install --save-dev babel-cli babel-preset-es2015

Добавьте преобразование в ваш файл .babelrc - это модуль prest, который мы загрузили выше. Взгляните на полный список пресетов, чтобы увидеть, какие из них лучше всего подходят для вас.

{
  "presets": ["es2015"]
}

Добавьте скрипт build к вашему package.json. Ниже src находятся ваши входные файлы, а build - преобразованные выходные файлы

"scripts": {
  "build": "babel src -d build"
}

Тогда постройте его!

$ npm run build

Затем запустите ваш код. На этом этапе вы захотите выполнить файлы в вашем каталоге build

$ npm start

Для Babel

require("babel/register");

Все последующие файлы, требуемые узлом с расширениями . es6, .Эс, .jsx и .js будет преобразован Вавилоном. Полифилл также требуется автоматически.

Вы сможете хранить исходные файлы в ES6, но все равно выполнять их с помощью node server.js


Судя по Вашим комментариям, у вас, кажется, возникли небольшие проблемы. Обратите особое внимание на желтую выделенную часть выше. Ваш первый файл может быть только ES5, который запускается самим узлом. Все последующие требованиябудут преобразованы Бабелем...

Вот как может выглядеть типичная установка

Сервер.js

// only ES5 is allowed in this file
require("babel/register");

// other babel configuration, if necessary

// load your app
var app = require("./app.js");

Приложение.js

// this file will be loaded through babel
// you can now use ES6 here and in every other include

Разожги огонь!

$ node server.js

Я только что написал сообщение в блоге на эту тему

Документация Babeljs CLI предупреждает следующее:

Вавилон-узел, не предназначенный для производственного использования

Вы не должны использовать babel-node в производстве. Это излишне тяжелый, с высокой нагрузкой на память из-за того, что кэш хранится в памяти. Вы также всегда будете испытывать снижение производительности при запуске, поскольку все приложение должно быть скомпилировано на лету.

Это пример как настроить сценарии npm для запуска приложения с помощью node вместо babel-node.

"scripts": {
  "clean": "rm -rf build && mkdir build",
  "build-css": "node-sass scss/app.scss public/css/app.css",
  "build-server": "babel -d ./build ./server -s",
  "build": "npm run clean && npm run build-css && npm run build-server",
  "lint": "eslint source/ --quiet",
  "start": "node ./build/index.js",
  "debug": "node --debug ./build/index.js",
  "test": "for i in $(ls tests/); do babel-node \"./tests/${i}\" | faucet ; done",
  "validate": "npm run lint; npm run test && npm outdated --depth 0"
},

Вы можете найти более подробную информацию в блоге

Важно взвесить все " за " и "против" использования вавилонского узла в производстве.

  • babel-node добавляет от половины секунды до одной секунды к стоимости запуска, на товарном оборудовании. Но если ваше приложение является долго работающим сервером, то стоимость запуска не будет иметь большого значения.
  • попробуйте измерить потребление дополнительной памяти. Для моего приложения, например (чтение и обработка данных временных рядов), это было всего 20 МБ. В зависимости от вашей ситуации, это может быть или не быть значительное.

С другой стороны,

  • использование babel-node напрямую упрощает разработку-вам не нужно будет "строить" скрипты, и у вас не будет отдельных src/lib и dist каталоги
  • Если вы import из локальных файлов, вы будете импортировать из src/myutils или из lib/myutils? Использование babel-node устраняет эту проблему.

Я использую Babel только для поддержки модулей. Теперь V8 только что выпустила поддержку модулей10 января 2017 года. Надеюсь, мы увидим модули. поддержка в узле под флагом через несколько месяцев, что делает мою причину использования Babel спорной.

Ответ@cuadraman более точен, чем ответ @naomik.

Чтобы кратко ответить на ваш вопрос: нет, babel-node не должен вызываться вами явно. babel-node - это частная библиотека, которую использует babel-cli.

В официальном учебнике есть все, что вам нужно, чтобы встать и работать на узле (не на стороне браузера!): https://github.com/babel/example-node-server . читай! Я нашел так много вводящих в заблуждение учебников по блогу, которые использовали круглые пути, и нашел эту статью самой простой в использовании. следовать.

Бонус: вопреки тому, что многие думают, вся транспилирующая магия может быть установлена локально (с помощью npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2). Нет необходимости устанавливать Babel или любой из его вспомогательных модулей глобально! Довольно изящно.