javascript - r.js, almond : Is it possible for two . 包含杏仁共享依赖的js文件?

标签 javascript requirejs r.js almond

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

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 的命令行条目,此外它将提供的模块重命名为“杏仁”并将命名模块添加到包含(这可能是导致我的错误的原因?)。另请注意,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"
    }
}

最佳答案

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

js中的文件有:almond.jsjquery.jsmain1.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.config 的调用将放在 js/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 完全一样。

关于javascript - r.js, almond : Is it possible for two . 包含杏仁共享依赖的js文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491508/

相关文章:

javascript - 如何让浏览器提示保存 Javascript 密码?

javascript - 修复底部的div。 (不使用javascript)

javascript - PhantomJS 不能很好地与 RequireJS+Jasmine 搭配使用

javascript - 为什么 Node 上的 requirejs 在继续之前没有加载指定的 require

javascript - RequireJS 优化器 - 一个 JS 文件与整个项目

javascript - 为什么 r.js 将 JS 合并压缩,然后将所有文件复制到输出目录?

javascript - 如何使用 Vue.js 将鼠标悬停在元素上时动态更改文本?

javascript - React - 映射要返回的组件数组

angularjs - grunt-contrib-requirejs 中的垫片未包装库

javascript - require.js 优化器 a​​pp.build.js 文档需要