2013-08-01 41 views

回答

1

你可能想使用類似RequireJS:http://requirejs.org/

RequireJS將允許您根據需要指定其將被加載的依賴。您還可以運行RequireJS optimizer將您的模板和JavaScript編譯爲一個文件以部署到生產服務器。

+0

我可以將整個目錄指定爲依賴項嗎? –

+0

你想用模塊來思考......你通常不能只是說「包含這個整個目錄」,因爲JavaScript往往需要按照一定的順序加載。相反,您需要創建一個包含功能所需的所有文件的模塊。然後,在應用程序的其他地方,您可以包含該模塊,而不是所有單個文件。希望這是有道理的。 – Polaris878

+0

我明白,但問題的關鍵是要更動態地指定這些依賴關係,而不是單調乏味地管理列表。 –

2

下面是使用browserify和node.js的構建腳本我的解決辦法,但我很好奇,如果任何人有一個更好的解決方案:

build.js:

var glob = require("glob"); 
var fs = require('fs'); 
var path = require('path'); 

function buildFile(directory, build_file, suffix) { 
    glob(directory, function(err, files) { 
    if (fs.existsSync(build_file)) { 
     fs.unlinkSync(build_file); 
    } 
    fs.appendFileSync(build_file, 'module.exports = {'); 
    var controllers = {}; 
    files.forEach(function (file) { 
     var key = path.basename(file, '.js')+suffix; 
     var value = "require('"+file+"')"; 
     fs.appendFileSync(build_file, '\n '+key+': '+value + ','); 
    }); 
    fs.appendFileSync(build_file, '\n}'); 
    }); 
}; 

buildFile('./controllers/*.js' , './controllers.js', 'Controller'); 
buildFile('./routes/*.js'  , './routes.js'  , 'Route'); 

app.js:

var App = Ember.Application.create(); 
App.reopen(require('./controllers.js')); 
App.reopen(require('./routes.js')); 

routes.js(從build.js輸出爲例):

module.exports = { 
    ApplicationRoute: require('./routes/Application.js'), 
    IndexRoute: require('./routes/Index.js'), 
    RecoverRoute: require('./routes/Recover.js'), 
    RegisterRoute: require('./routes/Register.js'), 
    UsersRoute: require('./routes/Users.js'), 
    UsersNewRoute: require('./routes/UsersNew.js'), 
    ValidateRoute: require('./routes/Validate.js'), 
} 

我使用Grunt.js在發生更改時自動監視和重建。