Для кода на стороне клиента вы делаете правильные вещи. babelify
его и отправьте клиенту.
Для кода на стороне сервера я бы просто сделал обычную сборку с помощью babel-cli
Согласно http://babeljs.io/docs/setup/#babel_register , babel-register
он не предназначен для использования в производстве - ловушка require рекомендуется в первую очередь для простых случаев.
для Babel 6+
Начиная с Babel 6, по умолчанию никакие преобразования не включаются. Итак, начнем с установки babel-cli
и babel-preset-es2015
.
$ npm install --save-dev babel-cli babel-preset-es2015
Добавьте преобразование в свой .babelrc
файл - это perst-модуль, который мы скачали выше. Взгляните на полный список предустановок, чтобы узнать, какие из них подходят вам лучше всего.
{
"presets": ["es2015"]
}
Добавьте build
скрипт в свой package.json
. Ниже приведены src
ваши входные файлы и build
преобразованные выходные файлы.
"scripts": {
"build": "babel src -d build"
}
Тогда собери его!
$ npm run build
Затем запустите свой код. На этом этапе вы захотите запустить файлы в своем build
каталоге.
$ npm start
для Babel <= 5 просто используйте хук require.
require("babel/register");
Все последующие файлы, требуемые узлом с расширениями .es6 , .es , .jsx и .js, будут преобразованы Babel. Polyfill также автоматически требуется.
Вы сможете сохранить свои исходные файлы в ES6, но по-прежнему выполнять их, используя node server.js
Судя по вашим комментариям, у вас возникли небольшие проблемы. Обратите особое внимание на выделенную желтым цветом часть выше. Ваш первый файл может быть только ES5, который запускается самим узлом. Все последующие требования будут преобразованы Babel ...
Вот как может выглядеть типичная установка
server.js
require("babel/register");
var app = require("./app.js");
app.js
сожги это!
$ node server.js
require("babel/register");
свой server.js, и когда я запустил,node server.js
я получаю сообщение об ошибке:Unexpected reserved word: import ...
так что, похоже, это не сработалоЯ только что написал в блоге сообщение по этой теме
Документация по интерфейсу командной строки Babeljs предупреждает следующее:
Это пример того, как вы можете настроить скрипты 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
действительно добавляет от полсекунды до одной секунды к затратам на запуск на обычном оборудовании. Но если ваше приложение является долго работающим сервером, стоимость запуска не будет иметь большого значения.С другой стороны,
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 или какие-либо его вспомогательные модули по всему миру! Довольно изящно.источник