Як запустити програму Node.js з увімкненими функціями ES6?


78

Я використовую потрібно гачок з BabelJS (раніше названий 6to5) для запуску вузла додатки з es6features :

// run.js
require("babel/register");
require("./app.js6");

Я телефоную, node run.jsщоб запустити свій app.js6 . Мені потрібно встановити BabelJS і надати run.js для кожного проекту, який я хотів би використовувати es6features. Я би віддав перевагу дзвінку типу nodejs6 app.js6. Як я можу досягти цієї системи самостійно (Unix та Windows)?


Чи роздумували ви про використання io.js замість NodeJS + Babel? iojs.org/en/index.html
Джахед

Я не знав io.js. Виглядає чудово, але на відміну від BabelJS він не підтримує аргументи відпочинку .
maiermic

1
Правильно. Ну, стежте за цим, він рухається швидко, на відміну від NodeJS, тому я впевнений, що незабаром він буде підтриманий.
Джахед


Можливо, захочете перевірити npmjs.com/package/babel-register-cli
aceofspades

Відповіді:


139

Додайте залежності babel-cliта babel-preset-es2015(також ES6) до файлу package.json вашого додатка та визначте startсценарій:

{
  "dependencies": {
    "babel-cli": "^6.0.0",
    "babel-preset-es2015": "^6.0.0"
  },
  "scripts": {
    "start": "babel-node --presets es2015 app.js"
  }
}

Тоді ви можете просто виконати таку команду для запуску програми:

npm start

Якщо ви коли-небудь вирішите припинити використання Babel (наприклад, коли Node.js підтримує всі функції ES6), ви можете просто видалити його з package.json:

{
  "dependencies": {},
  "scripts": {
    "start": "node app.js"
  }
}

Однією з переваг цього є те, що команда для запуску програми залишається незмінною, що допомагає, якщо ви працюєте з іншими розробниками.


20
Слід зазначити, що документи babel прямо застерігають від використання babel-node у виробництві .
Філ

5
А як щодо nodemonінших ваших налаштувань? Ви дійсно перезавантажуєте сервер вручну кожного разу, коли вносите зміни до файлів під час розробки?
Зелений

З документації: Ви не повинні використовувати babel-node у виробництві. Він надмірно важкий, з великим використанням пам'яті через кеш, який зберігається в пам'яті. Ви також завжди зазнаєте покарання за продуктивність запуску, оскільки весь додаток потрібно компілювати на льоту.
Феліпе Мартім

Оновлення: 2017 року, бажаним загальним стилем є preset-env . І поки це встановлено, його навіть не потрібно вказувати ...
Френк Ноке,

... Таким чином, до тих пір , як babel-cliі preset-envвстановлюється, і якщо ви любите речі безпосередньо (без НПМ бігти ... і package.json редагування потрібно) команда (видається від кореня проекту) є:$> ./node_modules/.bin/babel-node yourToolhere.js
Франк Nocke

39

Як налаштувати додаток node.js із підтримкою es6 та перезавантаженням сервера при зміні файлу .


Крок конфігурації (створення проекту з нуля):

1. Зайдіть в термінал до головного каталогу проекту

npm init // створимо пакет.json для проекту

2.Встановіть залежності

npm install --save-dev babel
npm install --save-dev babel-cli
npm install --save-dev babel-preset-es2015
npm install --save-dev babel-preset-stage-0 //*1
npm install --save-dev nodemon

1 - це може бути також етап-1 або 2, це залежить від того, які особливості ES ми хочемо використовувати

3. Ми повинні мати у файлі package.json щось подібне (напевно версія пакету буде іншою, але це нормально):

"devDependencies": {
  "babel": "^6.5.2",
  "babel-cli": "^6.16.0",
  "babel-preset-es2015": "^6.16.0",
  "babel-preset-stage-0": "^6.16.0",
  "nodemon": "^1.11.0"
}

4. Створіть файл .babelrc у кореневому каталозі проекту (є файл package.json)

{
 "presets": ["es2015", "stage-0"]
}

5. Створіть два каталоги:

src - ось робочий каталог з файлами, записаними в es6

dist - тут файли будуть скомпільовані до es5 за допомогою

Кореневий каталог вашого проекту повинен виглядати так:

  • проекту
    • src
      • index.js // основний файл проекту
    • дист
    • package.json
    • .babelrc

7. Додайте до package.json потрібні команди:

"scripts": {
  "watch": "babel -w src/ -d dist/",
  "build": "babel src/ -d dist/",
  "serve": "babel -w src/ -d dist/ | nodemon --watch dist",
  "test": "echo \"Error: no test specified\" && exit 1"
}

8. Доступні команди:

npm run watch // починає спостерігати за переглядом змін у каталозі src та компілює в dist

npm run build // компілює файли з каталогу src в dist

npm run serve // він робить сервер спостерігати + запустити вузол, при кожній зміні файлу він перезапустить сервер вузла за допомогою nodemon, який спостерігає за змінами каталогу каталогів

9.Заключні нотатки

  • Сервер буде запускати файл dist / index.js як основний файл.
  • Файл dist / index.js буде скомпільовано з src / index.js, тому повинен бути основний файл проекту.
  • Каталог dist слід додати для ігнорування за допомогою git (але не ігнорувати його для npm, якщо це буде пакет вузлів)

10. Запустіть сервер і починайте створювати програму в каталозі src .

npm run serve

II. Більш простий спосіб (готовий до використання шаблон)

Якщо для вас занадто багато балів, тоді повний робочий шаблон доступний на github - https://github.com/maciejsikora/node-express-babel-boilerplate .


проблема в цій транпіляції - просто перетворити файли js і не включати модулі вузлів всередину
stackdave

1
створити другу команду збірки, наприклад - "build-modules": "babel node-modules / -d dist /",
Maciej Sikora

18

Ви можете використовувати вузол з прапором --harmony для запуску сценарію з функціями es6


5
Вузол із прапором --harmony не підтримує аргументи відпочинку . Функція, яка підтримується BabelJS і яку я хотів би використовувати.
maiermic

Ви бачите, що параметри відпочинку тепер підтримуються kangax.github.io/compat-table/es6/#node8_10
Дмитро Давидов

6

вам потрібно встановити babel-registerі babel-preset-es2015попередньо які використовуються в babel-registerопції для Enabled зверненого ES6до ES5на льоту transpilation

 npm install babel-register

 npm install babel-preset-es2015

ваш файл run.js :

// require babel-register and set Babel presets options to es2015
require('babel-register')({
   presets: [ 'es2015' ]
});

require("./app.js6");

Примітка : Тепер вам не потрібен .babelrcфайл для встановлення Babel presetsпараметрів, як ми встановлюємо його requireметодом


1
У ньому є певне попередження щодо використання у виробництві babeljs.io/docs/setup/#installation Не призначене для виробничого використання. Застосування хука насамперед рекомендується для простих випадків.
WitVault

у цьому випадку, як я збираюся запустити свою програму у виробництві? Чи потрібно компілювати свої файли до es5? : /
sandiprb

@sandip_rb так, ви повинні скомпілювати файли перед тим, як перейти до виробництва. Ви повинні зрозуміти, що це рішення працює для node.jsверсій, які не підтримуються ES6(версії менше 4.x). Тепер node.jsпідтримка версій ES6
Ahmed Hamdy

@sandip_rb див. корисне посилання про використання бабеля у виробництві -> medium.com/@Cuadraman/…
Ахмед Хамді

6
  1. node -r babel-register scripts.js

Це найкраще рішення

  1. npx babel-node scripts.js

! Вузол Babel не працює належним чином у випадку виходу із системи, і kexecпакет також не допомагає в цьому випадку (як я намагався)

В обох випадках вам потрібно використовувати, .babelrcякий повинен описувати пресети та плагіни для вашої програми.

npxвикористовує лише для виконання бібліотек, які не встановлені за допомогою npmабо yarn. Інакше потрібно npm i -g babel-cliі тодіbabel-node script.js


node -r babel-register scripts.js працює як шарм і досить просто у розробнику
Nditah

3

Я віддав би перевагу такому дзвінку nodejs6 app.js6.

Ви можете спробувати рішення обгортки з API Babel-Core:

// Save as es6.js

var babel = require("babel-core");
var argc = process.argv.length;

babel.transformFile(process.argv[argc - 1], function (err, result) {
    eval(result.code);
});

Запустіть скрипт ES6 із node es6 thefile.js

Довідково : офіційне використання doc


1

Починаючи з Babel 6, тепер ви повинні встановити babel-registerта використовувати наступне

require("babel-register");

Також обов’язково встановіть пресет Babel es2015.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.