【问题标题】:Require Js - Seeking Hybrid implementation of the requirejs in "Not fully client side application"Require Js - 在“不完全客户端应用程序”中寻求 requirejs 的混合实现
【发布时间】:2015-07-16 03:37:59
【问题描述】:

这几天我一直在探索 requirejs(用于异步加载模块和依赖项的 JavaScript 模块加载器)。

我所了解的是,您需要将所有 JavaScript 库或插件(如 Jquery 等)加载到 require.config 中,以便它们用作您创建的任何自定义模块或您使用的任何其他插件中的依赖项直接依赖于 jquery 或任何其他库。

我不确定和怀疑的是它是否可以在已经构建的应用程序中使用,我只希望使用 requirejs 和其他应用程序定义/使用依赖于 Jquery 的少数插件或库 javascript continue以行形式使用 jquery。

也就是说:我使用 script 标签而不是通过 require.config 包含 jquery,但希望使用和包含其他依赖于 jquery 的 require js 的插件/JavaScript。

简而言之,我希望在我已经构建的服务器端应用程序中实现一种 requirejs 的混合实现,它不是一个完全客户端应用程序。

非常感谢您提供代码 sn-p 或操作方法。

【问题讨论】:

    标签: javascript requirejs


    【解决方案1】:

    是的,这是可能的,只要你对你所做的事情小心。

    加载 RequireJS 加载的代码所依赖的 JavaScript 代码的所有 script 元素应该出现在任何启动 RequireJS 加载模块的代码之前。这是确保在 RequireJS 开始加载模块时您需要的东西可用的唯一方法。

    然后您可以选择使用 RequireJS 加载模块,只需假设使用 script 加载的内容已使其自身在全局范围内可用,并使用它而不将其添加到您的依赖项中。例如,如果一个模块需要 jQuery,并且它已经加载了 script 元素,那么该模块将假定 $ 已经定义:

    define(function () {
        $("p").append(...);
    });
    

    对于已经列出了对您使用script 元素加载的代码的依赖关系的第 3 方代码,或者如果您希望在您编写的代码中明确依赖关系,则必须使用“粘合模块”。 (这是我自己的代码更喜欢的选项。)上面的相同模块将正式需要 jQuery:

    define(["jquery"], function ($) {
        $("p").append(...);
    });
    

    你必须有一个jquery 的“胶水模块”。我通常将这些模块放在我的require.config 调用之前而不是 将它们放在单独的文件中。它会是这样的:

    define('jquery', function () {
        return $;
    });
    

    注意这里define调用的第一个参数是一个字符串(而不是一个数组),它告诉RequireJS模块被命名为jquery。您通常不应该硬编码这样的名称,但对于胶水模块,这很好。胶水模块假设$ 已定义并且是jQuery。任何需要 jQuery 的模块都依赖于这个模块。如果在稍后阶段 jQuery 被加载为 RequireJS 模块,则可以删除胶水模块,并且不需要修改任何依赖于 jQuery 的模块。

    【讨论】:

    • 谢谢 louis ...让我试试你在这里解释的方式,并会在这里回复你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多