2017-02-27 48 views
0

我正在使用resitybabel編寫應用程序。在我route.jsBabel導出默認功能錯誤

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 

誰能解釋爲什麼會發生。謝謝。

回答

0

瞭解什麼是export default是很重要的。它有兩種形式:

  1. export default _THING_EVALUATING_TO_VALUE_;
  2. export default function fn() {}class Name {}

因爲你的任務不是一個函數或類聲明,您使用的是第一位的,這意味着它是評價一個事情一個值。而你的代碼很好。問題是respond =是一個賦值,而變量respond沒有在任何地方聲明。

所以,你的代碼會如果你沒有

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

工作,或者你可以刪除的變量賦值,做

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

,或者您可以使用函數聲明

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

感謝你的詳細答案。我正在開發一個react-native項目,並使用上面所做的相同語法。它的工作原理讓我認爲模塊捆綁器在這種情況下不僅僅是Babel本身。 –