2014-10-17 16 views
13

我想require與browserify使用變量傳遞給函數的文件:要求在browserify不起作用變量名

var playersOptions = { 
    name: 'players', 
    ajax: 'team-overview', 
    route: { 
     name: 'overview', 
     path: 'playersOverview', 
     url: 'playersoverview' 
    } 
}; 

var BackboneView = require(playersOptions.route.path); 
//Error: Uncaught Error: Cannot find module 'playersOverview' 

var BackboneView = require('playersOverview'); 
//Requires the file without any problems. 

我很困惑,爲什麼會失敗?如何在兩個字符串都找不到模塊?

回答

18

Browserify必須能夠在構建時靜態分析所有require語句,以便它可以知道它需要包含哪些文件。這要求require只能與源代碼中的字符串一起使用。

不是傳遞模塊的名稱身邊後要求,只是通過模塊本身:

var playersOptions = { 
    name: 'players', 
    ajax: 'team-overview', 
    route: { 
     name: 'overview', 
     module: require('playersOverview'), 
     url: 'playersoverview' 
    } 
}; 

var BackboneView = playersOptions.route.module; 

即使這Browserify限制是不存在的(例如,如果你使用的node.js直接),因此如果傳遞給它的模塊名具有相對於調用者目錄的路徑並被傳遞到不同目錄中的文件中的代碼中,那麼require調用可能會中斷,所以避免傳遞模塊名稱仍然是個好主意。

+0

Arghhh你血腥的天才!這真是太好了! 'Logic' :) – 2014-10-17 22:28:28