Babel导出默认功能错误

时间:2017-02-27 17:22:31

标签: babeljs

我正在使用resitybabel撰写应用程序。在我的route.js

export default respond = (req, res, next) => {
  res.send('hello');
  next();
}

我的index.js

import restify from 'restify';
import route from './route';

const server = restify.createServer();
server.get('/bonjour', route);

server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});

和我的.babelrc

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

编译后,输出route.js

'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

exports.default = respond = function respond(req, res, next) {
  res.send('hello');
  next();
};

当我运行node index.js时,出现以下错误:

exports.default = respond = function respond(req, res, next) {
                          ^

ReferenceError: respond is not defined

任何人都可以解释为什么会这样。谢谢。

1 个答案:

答案 0 :(得分:1)

了解export default是什么很重要。它有两种形式:

  1. export default _THING_EVALUATING_TO_VALUE_;
  2. export default function fn() {}class Name {}
  3. 由于您的赋值不是函数或类声明,因此您使用的是第一个,这意味着它是一个计算值的东西。你的代码就可以了。问题是respond =是一个赋值,变量respond未在任何地方声明。

    所以如果你做了

    ,你的代码就可以了
    let respond;
    export default respond = (req, res, next) => { }
    

    或者您可以删除变量赋值并执行

    export default (req, res, next) => { }
    

    或者您可以使用函数声明

    export default function respond(req, res, next) { }