Как запустить простое приложение с koa2?

Проблема

Я пытаюсь запустить простой http-сервер, используя koa2, но есть проблемы с запуском.

Он использует es6, которые, как ожидается, будут работать в будущем node.js, и мне было интересно как я могу запустить его с node v6.1.0 ?

Код

import Koa from 'koa';    
const app = new Koa();

// Setup handler.
app.use(async ctx => {
    ctx.body = "Hello World!";
});

// Start server.
app.listen(3000);

Вывод

$ node --version
v6.1.0

$ node --harmony index.js
C:\Users\gevor\WebstormProjects\untitled1\index.js:1
(function (exports, require, module, __filename, __dirname) { import Koa from 'koa';
                                                              ^^^^^^
SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:511:25)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
    at Function.Module._load (module.js:407:3)
    at Function.Module.runMain (module.js:575:10)
    at startup (node.js:160:18)
    at node.js:445:3

Вопрос

Я хочу знать, как запустить мое приложение?

Похожие проблемы


person gevorg    schedule 30.05.2016    source источник
comment
Какие проблемы у тебя? Это весь код, который у вас есть?   -  person Molda    schedule 30.05.2016
comment
Я хочу знать, как настроить среду для запуска базового примера с Koa v2 и node v6.1.0.   -  person gevorg    schedule 30.05.2016
comment
Установите node.js и запустите его node index.js, предполагая, что код находится в index.js. Ты пытался?   -  person Molda    schedule 30.05.2016
comment
Вы должны добавить эти ошибки к своему вопросу. Вы пытались запустить узел с флагом гармонии node --harmony index.js?   -  person Molda    schedule 30.05.2016
comment
@Molda, спасибо за предложение, я только что добавил журнал выполнения к вопросу.   -  person gevorg    schedule 31.05.2016
comment
Я не эксперт в этом, но я думаю, что этот узел пока не поддерживает import, async, await. Я думаю, единственный способ - использовать транспайлер, такой как babeljs.io   -  person Molda    schedule 31.05.2016
comment
@Molda Я нашел обходной путь, который искал, включая установку Babel, спасибо, чувак!   -  person gevorg    schedule 02.06.2016


Ответы (2)


Решение

Мне удалось найти обходной путь, и я опишу решение, включающее установку модуля Babel.

Шаг 1. Установите Babel и необходимые пресеты

$ npm install babel-core --save
$ npm install babel-preset-es2015-node5 --save
$ npm install babel-preset-stage-3 --save

Шаг 2. Создайте файл index.js с требованием babel-core/register

// set babel in entry file
require('babel-core/register')({
    presets: ['es2015-node5', 'stage-3']
});

require('./app');

Шаг 3. Поместите образец кода внутрь app.js

import Koa from 'koa';    
const app = new Koa();

// Setup handler.
app.use(async ctx => {
    ctx.body = "Hello World!";
});

// Start server.
app.listen(3000);

После запуска node index.js сервер работает как круг и import, async, await обрабатываются правильно.

Ссылки

person gevorg    schedule 02.06.2016
comment
Для части async/await теперь вы можете использовать нативную реализацию, которая не требует транспиляции вашего кода. Вам нужен узел ›= 7 и запустите приложение с флагом --harmony-async-await. Нативного решения для импорта ES6 пока нет. - person Bertofer; 17.02.2017
comment
Просто отметим, что Node 7.6 поставляется с async/await по умолчанию, поэтому флаг --harmony-async-await больше не нужен :) - person Bertofer; 25.02.2017

Обновите версию вашего узла как минимум до 7.6, после чего нет необходимости транспилировать ваш код с помощью babel, которого очень легко избежать в производстве. Версия Node> 7.6 поддерживает async/await, который очень мощный.

person BHUVNESH KUMAR    schedule 08.09.2017