如何在requirejs中包含第三方脚本

时间:2015-12-14 08:56:48

标签: javascript requirejs frontend amd

我正在尝试AMD处理scipts的方式,我的选择落在了requirejs上。在这个项目中,我使用MDL(前端框架;对于那些没有听说过它的人认为它是bootstrap 3),它应该被包括在内:

<link rel="stylesheet" href="/bower_components/material-design-lite/material.min.css">
<script src="/bower_components/material-design-lite/material.min.js"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

我对这个框架提供的js API不感兴趣(如果它提供任何),我需要这个脚本,只有当我将特定于framwerk的类附加到元素时,UI才能正常工作。

根据requirejs哲学,我只需要在我的页面上包含一个script标记的脚本文件 - 入口点。我知道在那个主脚本中我需要依赖。如果它是jQuery或下划线,即库我实际上需要并且我的代码依赖于,我会写如下:

require(
    ['jquery'],
     function($) {
        $('body').append(...);
    }
);

但是,如果它不是一个实际的依赖项,我该如何滚动,但我仍然需要将它加载到我的页面中,在这种特殊情况下,我需要先加载它。

我该怎么办?我的猜测是我从我的script中删除了head标记,并在我的入口点脚本中用方括号指定它(正如我在上面的代码段中为jquery所做的那样),但只是不要使用它。这是对的吗?

1 个答案:

答案 0 :(得分:0)

  

但如果它不是一个真正的依赖,我怎么滚动,但我仍然需要将它加载到我的页面中,在这种特殊情况下,我需要先加载它。

RequireJS仅保证加载模块的相对顺序。如果必须首先加载一个模块,那么依赖链必须是其他所有东西直接或间接依赖它的。 RequireJS没有提供一种说法&#34;在其他所有内容之前加载它的方法&#34;。您只能通过依赖项获得此效果。 (有时人们认为deps配置选项可以保证某些模块首先加载。但它们没有。或者他们认为requiredefine调用中依赖关系的顺序设置了加载超越依赖项设置的内容。它没有。如果AB没有自己的依赖关系,那么require(['A', 'B'], ...require['B', 'A'], ...都是可以按任何顺序自由加载模块。)

  

我该怎么办?我的猜测是我从头部删除了脚本标签,并在我的入口点脚本的方括号中指定它(正如我在上面的代码片段中为jquery所做的那样),但是我没有使用它。这是对的吗?

从理论上讲,这样做没有问题。我说&#34;理论上&#34;因为我不使用MDL所以我不知道MDL是否有任何阻止它工作的需要。您已将MDL与Bootstrap 3进行了比较。您所描述的是我如何使用RequireJS加载Bootstrap。我倾向于使用CommonJS习惯用法,因此需要Bootstrap的模块看起来像这样:

define(function (require, exports, module) {
'use strict';

require("bootstrap");

没有必要像var bootstrap = require("bootstrap");这样做,因为无论如何值都是undefined,因为Bootstrap的JS代码将自己安装为jQuery插件。