如何使用RequireJS加载Underscore库?

时间:2011-09-24 15:09:55

标签: javascript underscore.js requirejs

require(['underscore'], function ($, _) {
  ...
});

不起作用! (_不是函数)

如何管理?

5 个答案:

答案 0 :(得分:7)

请注意,underscore.js不会将自己注册为AMD模块(虽然它在早期版本中只执行了很短的时间),因此如果没有使用“shim”的某些配置,它就无法在require()调用中使用: “像这样:

require.config({
    paths: {
        jquery: 'lib/jquery.min',
        underscore: 'lib/underscore-min'
    }
    shim: {
        "underscore": {
            exports: "_"
        }
    }
});

请参阅以下文档:http://requirejs.org/docs/api.html#config-shim

在将shim:添加到require.js之前,您可以使用插件use.js执行类似的操作(如果您需要使用旧版本的require.js)。

在撰写本文时,require.js的当前版本是2.1.8。

或者,您可以使用lodash.js作为underscore.js的替代品 - 它确实将自己注册为AMD模块,因此您可以在没有额外配置的情况下使用它:http://lodash.com/

答案 1 :(得分:2)

我认为问题在于传递给你的回调的args顺序。

应该是:

require(['underscore'], function (_, $) {
 ...
});

此外,您还需要使用添加此功能的下划线版本1.2.1。

答案 2 :(得分:0)

require(["underscore"], function() { 
  console.log(_ === window._);
});

答案 3 :(得分:0)

这一切都取决于脚本所在的位置。 因为我没有看到你指定了baseUrl,所以baseUrl将是默认的, 这意味着,要么是两件事:

  1. 您的脚本直接位于html文件中,在您的情况下 因此将在html的同一目录中查找underscore.js 文件
  2. 您的脚本位于html引用的javascript文件中 现在,它将在你的目录中搜索underscore.js 自定义javascript文件。
  3. 检查underscore.js是否确实存在。

答案 4 :(得分:0)

以下是检查点,以确保您需要的工作

  1. 获取require-jquery.js并将其放入/js-root目录

  2. 在结束</body>代码之前添加到您的HTML:<script data-main="/js-root/main-js-file-name" src="/js-root/require-jquery.js"></script>

  3. 获取underscore adapted for AMD,并将其放入/js-root目录

  4. main-js-file-name.js

  5. 写:

    require(["jquery", "underscore"], function ($, _) {
        ...
    });
    

    同样,在非主要的AMD JS文件中,在定义模块时,要使用_,请写:

    define(["jquery", "underscore"], function ($, _) {
        ...
        return theModuleObjectOrFunction;
    });