需要Js - 在“不完全客户端应用程序”中寻求requirejs的混合实现

时间:2015-05-06 06:39:54

标签: javascript requirejs

我正在探索requirejs(用于异步加载模块和依赖项的JavaScript模块加载器)。

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

我不确定并且持怀疑态度是否可以在已经构建的应用程序中使用,我只需要使用requirejs和其他应用程序javascript继续定义/使用依赖于Jquery的少量插件或库使用行中的jquery。

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

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

我们非常感谢您的代码段或操作方法。

1 个答案:

答案 0 :(得分:2)

是的,如果您对自己的工作一无所知,这是可能的。

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

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

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

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

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

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

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

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