Require Js - 在 "Not fully client side application" 中寻求 requirejs 的混合实现

Require Js - Seeking Hybrid implementation of the requirejs in "Not fully client side application"

我已经研究了 requirejs(用于异步加载模块和依赖项的 JavaScript 模块加载器)这几天了。

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

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

也就是说:我使用脚本标签包含 jquery 而不是通过 require.config 但希望使用依赖于 require js 的其他 plugin/JavaScript Jquery.

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

非常感谢代码片段或操作方法。

是的,这是可能的,前提是你要谨慎行事。

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

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

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

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

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

并且您必须为 jquery 设置 "glue module"。我通常将这些模块放在 require.config 调用之前 而不是 将它们放在单独的文件中。它会是这样的:

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

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