有没有可能使用requireJS“要求”整个文件夹。
例如,我有一个包含大量行为js文件的behaviors文件夹。我真的希望能够简单地使用require('behaviors/*',function() {...});来加载该文件夹中的所有内容,而不是必须保持列表最新。压缩和优化后,我会将所有这些文件放在一起,但对于开发来说,单独使用它们会更容易。
发布于 2011-05-05 13:35:28
浏览器中的javascript没有文件系统访问权限,因此无法扫描目录中的文件。如果使用php或ruby等脚本语言构建应用程序,则可以编写一个脚本来扫描目录并将文件名添加到require()调用中。
发布于 2015-09-15 08:18:05
我写了一个库来解决这个问题。最终,另一个人出现并改进了我的库,如下所示:
https://github.com/smartprocure/directory-metagen
您可以将my lib与Gulp一起使用-它为您的项目生成元数据,并且RequireJS可以使用该元数据从文件系统中请求所需的文件。
使用此库将生成如下所示的RequireJS模块:
define(
[
"text!app/templates/dashboardTemplate.ejs",
"text!app/templates/fluxCartTemplate.ejs",
"text!app/templates/footerTemplate.ejs",
"text!app/templates/getAllTemplate.ejs",
"text!app/templates/headerTemplate.ejs",
"text!app/templates/homeTemplate.ejs",
"text!app/templates/indexTemplate.ejs",
"text!app/templates/jobsTemplate.ejs",
"text!app/templates/loginTemplate.ejs",
"text!app/templates/overviewTemplate.ejs",
"text!app/templates/pictureTemplate.ejs",
"text!app/templates/portalTemplate.ejs",
"text!app/templates/registeredUsersTemplate.ejs",
"text!app/templates/userProfileTemplate.ejs"
],
function(){
return {
"templates/dashboardTemplate.ejs": arguments[0],
"templates/fluxCartTemplate.ejs": arguments[1],
"templates/footerTemplate.ejs": arguments[2],
"templates/getAllTemplate.ejs": arguments[3],
"templates/headerTemplate.ejs": arguments[4],
"templates/homeTemplate.ejs": arguments[5],
"templates/indexTemplate.ejs": arguments[6],
"templates/jobsTemplate.ejs": arguments[7],
"templates/loginTemplate.ejs": arguments[8],
"templates/overviewTemplate.ejs": arguments[9],
"templates/pictureTemplate.ejs": arguments[10],
"templates/portalTemplate.ejs": arguments[11],
"templates/registeredUsersTemplate.ejs": arguments[12],
"templates/userProfileTemplate.ejs": arguments[13]
}
});
然后您可以在您的前端中要求模块,如下所示:
var footerView = require("app/js/jsx/standardViews/footerView");
但是,正如您所看到的,这太冗长了,所以神奇的方式如下所示:
将上面的依赖命名为allViews!
现在您可以执行以下操作:
var allViews = require('allViews');
var footerView = allViews['standardViews/footerView'];
要求目录完整有两个优点:
(1)在生产环境中,使用r.js优化器,您可以指向一个依赖项(模块A),然后它可以轻松地跟踪表示整个目录的A的所有依赖项
(2)在开发中,您可以预先要求整个目录,然后使用同步语法来要求依赖项,因为您知道它们已经加载
享受"RequireJS-Metagen“
https://github.com/smartprocure/directory-metagen
https://stackoverflow.com/questions/5892978
复制相似问题