我在尋找自動加載器,類似於他們如何在語言中操作(例如http://php.net/manual/en/language.oop5.autoload.php)。我只是指定查找文件的算法,並將其自動加載到應用程序中。Ember.js中的類自動加載器?
我最初的想法是一個構建過程,它掃描目錄並構建索引文件。有沒有更好的辦法?
我在尋找自動加載器,類似於他們如何在語言中操作(例如http://php.net/manual/en/language.oop5.autoload.php)。我只是指定查找文件的算法,並將其自動加載到應用程序中。Ember.js中的類自動加載器?
我最初的想法是一個構建過程,它掃描目錄並構建索引文件。有沒有更好的辦法?
你可能想使用類似RequireJS:http://requirejs.org/
RequireJS將允許您根據需要指定其將被加載的依賴。您還可以運行RequireJS optimizer將您的模板和JavaScript編譯爲一個文件以部署到生產服務器。
我可以將整個目錄指定爲依賴項嗎? –
你想用模塊來思考......你通常不能只是說「包含這個整個目錄」,因爲JavaScript往往需要按照一定的順序加載。相反,您需要創建一個包含功能所需的所有文件的模塊。然後,在應用程序的其他地方,您可以包含該模塊,而不是所有單個文件。希望這是有道理的。 – Polaris878
我明白,但問題的關鍵是要更動態地指定這些依賴關係,而不是單調乏味地管理列表。 –
下面是使用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在發生更改時自動監視和重建。
你在使用什麼服務器端框架? – Polaris878
我正在使用Express.js –