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

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

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

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

// 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"

Ответ 1

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


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

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

для Babel 6 +

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

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

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

{
  "presets": ["es2015"]
}

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

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

Затем постройте его!

$ npm run build

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

$ npm start

для Babel <= 5, просто используйте требуемый крючок.

require("babel/register");

Все последующие файлы, необходимые для node с расширениями .es6, .es, .jsx и .js будет преобразован Бабелем. polyfill также требуется.

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


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

Здесь типичная настройка может выглядеть как

server.js

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

// other babel configuration, if necessary

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

app.js

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

запустите его!

$ node server.js

Ответ 2

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

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

babel- node не предназначен для использования в производстве

Вы не должны использовать 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"
},

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

Ответ 3

Важно взвешивать плюсы и минусы использования babel- node в производстве.

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

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

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

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

Ответ 4

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

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

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

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