javascript - 有没有办法根据模块是否为 404s 通过 RequireJS 有条件地加载模块?

标签 javascript requirejs amd

问题: 我们目前有以下 require.config:

require.config({
    paths: {
        lodash: '/embed/lodash',
        utils: '/embed/utils',
        analytics: '/external/analytics'
    }
});

保证以 embed 开头的文件路径存在。 以 external 开头的文件路径可能可用也可能不可用,具体取决于环境。 如果我用以下内容开始我的 main.js:

require(['lodash', 'utils', 'analytics'], function (_, utils, analytics) {

并且找不到分析,整个事情崩溃了(正如预期的那样)。 尝试对以下内容进行变体证明是徒劳的:

require(['lodash', 'utils'], function (_, utils) {
    ...code and stuff
    $.ajax({ url: '/path/to/actual/file' })
        .done(function () {
            require(['analytics'], function (analytics) {
                // throws Mismatched anonymous define() module Error
            });
        })
        .fail(function () {
            // continue with stub of analytics
            // or not run analytics dependent code
        });

根据这个问题的标题: 有没有一种方法可以根据文件是否可访问有条件地将模块包含在 RequireJS 中?

最佳答案

如果你想在你的外部文件不可用时下载回退,你可以使用path fallback requireJS 中的配置。

像下面这样设置你的路径配置。

require.config({
    paths: {
        lodash: '/embed/lodash',
        utils: '/embed/utils',
        analytics: ['/external/analytics',
                     '/embed/analytics'
                ]
    }
});

然后在嵌入目录中创建一个文件 analytics.js,它为您提供通常由分析从外部返回的对象。如果 external/analytics 在全局命名空间中添加一个对象,也执行此操作。

embed/analytics.js

define(function(){
    var analytics = window.analytics = {
        send : function(){
            //Nothing to do here.
        }
        //,... //Add more methods used by your code like send
    }
    return analytics;
});

关于javascript - 有没有办法根据模块是否为 404s 通过 RequireJS 有条件地加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000153/

相关文章:

Javascript:将 HTML 添加到字符串 - 创建链接并将其添加到输出

javascript - 如何在单击按钮时显示实时聊天对话框?

javascript - 使用requirejs为chrome扩展创建bluebird promise 时出错

javascript - 当应用程序部署到云时,.js 文件将与 index.html 的内容一起提供

javascript - nodejs 模块名称中的 "!"字符有什么作用?

javascript - 具有多个模块的 RequireJS

javascript - jQuery UI 可排序包含无法检测占位符

javascript - 如何通过外部 Javascript 库(例如 jQuery)使用 Google Closure 样式表重命名?

JavaScript - 使用 requireJS 加载 Bluebird 模块

javascript - node.js 和 AMD API 有什么用?