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



Я разрабатывал сайт с использованием 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"
621   4  

4 ответов:

для кода на стороне клиента, вы делаете правильные вещи. babelify он и грузит его к клиенту.


для кода на стороне сервера, я бы просто сделал обычную сборку с помощью Бабель-интерфейс командной строки

согласно 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 file - это модуль prest, который мы загрузили выше. Взгляните на полный список пресетов чтобы увидеть, какие из них лучше всего подходят для вас.

{
  "presets": ["es2015"]
}

добавить a 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-узел не предназначен для производственного использования

вы не должны использовать 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 в производстве.

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

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

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

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

ответ@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 или любой из его вспомогательных модулей по всему миру! Довольно изящно.

Comments

    Ничего не найдено.