首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >requireJS整个文件夹

requireJS整个文件夹
EN

Stack Overflow用户
提问于 2011-05-05 13:17:01
回答 2查看 24.1K关注 0票数 19

有没有可能使用requireJS“要求”整个文件夹。

例如,我有一个包含大量行为js文件的behaviors文件夹。我真的希望能够简单地使用require('behaviors/*',function() {...});来加载该文件夹中的所有内容,而不是必须保持列表最新。压缩和优化后,我会将所有这些文件放在一起,但对于开发来说,单独使用它们会更容易。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-05 13:35:28

浏览器中的javascript没有文件系统访问权限,因此无法扫描目录中的文件。如果使用php或ruby等脚本语言构建应用程序,则可以编写一个脚本来扫描目录并将文件名添加到require()调用中。

票数 24
EN

Stack Overflow用户

发布于 2015-09-15 08:18:05

我写了一个库来解决这个问题。最终,另一个人出现并改进了我的库,如下所示:

https://github.com/smartprocure/directory-metagen

您可以将my lib与Gulp一起使用-它为您的项目生成元数据,并且RequireJS可以使用该元数据从文件系统中请求所需的文件。

使用此库将生成如下所示的RequireJS模块:

代码语言:javascript
复制
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]
        }
    });

然后您可以在您的前端中要求模块,如下所示:

代码语言:javascript
复制
var footerView = require("app/js/jsx/standardViews/footerView");

但是,正如您所看到的,这太冗长了,所以神奇的方式如下所示:

将上面的依赖命名为allViews!

现在您可以执行以下操作:

代码语言:javascript
复制
var allViews = require('allViews');
var footerView = allViews['standardViews/footerView'];

要求目录完整有两个优点:

(1)在生产环境中,使用r.js优化器,您可以指向一个依赖项(模块A),然后它可以轻松地跟踪表示整个目录的A的所有依赖项

(2)在开发中,您可以预先要求整个目录,然后使用同步语法来要求依赖项,因为您知道它们已经加载

享受"RequireJS-Metagen“

https://github.com/smartprocure/directory-metagen

https://www.npmjs.com/package/requirejs-metagen

https://github.com/ORESoftware/requirejs-metagen

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5892978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档