3

是否可以将杏仁与多页设置一起使用,如下所示:

common.js 加载到所有页面并包含 almond、bootstrap 和 jquery

main1.js 仅在第 1 页加载并包含杏仁和需要 jquery 的 app/main1.js。当我为 main1.js 运行构建时,我排除了 bootstrap 和 jquery,因为它是共同的。

在第 1 页 common.js 和 main1.js 上已加载,但我收到一个错误:Uncaught Error: app/main1 missing jquery.

有可能用杏仁做这个还是我做错了什么?

更新:我正在使用 django-require 它将 python 对象转换为 r.js 的命令行条目,此外,它将提供的模块重命名为“almond”并将命名模块添加到包含中(这可能是导致我的错误的原因? )。另请注意,django-require 不允许包含/排除 REQUIRE_STANDALONE_MODULES,我添加了此功能:

REQUIRE_STANDALONE_MODULES = {

    "common": {
        "out": "common.js",
        "include": ["bootstrap", "jquery"],
        "build_profile": "module.build.js"
    },
    "main1": {
        "out": "main1.js",
        "exclude": ["bootstrap", "jquery"],
        "build_profile": "module.build.js"
    }
}

Main1.js

require(['app/main1']);

这将转换为这样的构建文件条目:

modules = {
    "almond": {
        "out": "common.js",
        "include": ["common", "bootstrap", "jquery"],
        "build_profile": "module.build.js"
    },
    "almond": {
        "out": "main1.js",
        "include:"main1", 
        "exclude": ["bootstrap", "jquery"],
        "build_profile": "module.build.js"
    }
}
4

1 回答 1

2

有可能的。你只需要清楚你的包含和排除。在以下设置中,所有模块都存储在js子目录中,优化的输出输出到build. 为简单起见,jQuery 被存储为js/jquery.js这样,因此无需调用require.config.

中的文件js是:almond.jsjquery.js和。main1.jsmain2.js

这是构建配置:

({
    baseUrl: "js",
    optimize: "none", // So that we can see what is going on in the bundles.
    dir: "build",
    removeCombined: true,
    skipDirOptimize: true,
    modules: [
        {
            name: "common",
            create: true,
            include: ["almond", "jquery"]
        },
        {
            name: "main1",
            exclude: ["jquery"],
            insertRequire: ["main1"]
        },
        {
            name: "main2",
            exclude: ["jquery"],
            insertRequire: ["main2"]
        }
    ]
})

公共模块的create: true选项是必需的,以便优化器创建它。据推测,将拨打电话require.configjs/common.js然后您将删除此选项。

此优化的结果在第 1 页上加载:

<script type="text/javascript" src="build/common.js"></script>
<script type="text/javascript" src="build/main1.js"></script>

第 2 页将build/main2.js改为加载。

加载 Bootstrap 需要一个 RequireJS 配置,该配置与一般情况相同,并且在其他方​​面与上面代码中的 jQuery 完全一样。

于 2014-03-20T11:01:37.563 回答