如何使用RequireJS加载Underscore库?

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

无法工作!(_不是一个函数)

如何解决?

5个回答

7
请注意,underscore.js不会将自己注册为AMD模块(尽管在早期版本中曾经这样做过短暂的时间),因此如果想在require()调用中使用它,需要使用“shim:”进行一些配置,如下所示:
require.config({
    paths: {
        jquery: 'lib/jquery.min',
        underscore: 'lib/underscore-min'
    }
    shim: {
        "underscore": {
            exports: "_"
        }
    }
});

请参见文档:http://requirejs.org/docs/api.html#config-shim 在require.js添加shim:之前,您可以使用插件use.js进行类似操作(如果需要使用旧版本的require.js)。
截至本篇翻译撰写时,最新版本的require.js是2.1.8。
或者,您可以使用lodash.js作为underscore.js的替代品——它会将自己注册为AMD模块,因此您无需额外配置即可使用:http://lodash.com/

2
我认为问题在于传递给回调函数的参数顺序不正确。 应该是:
require(['underscore'], function (_, $) {
 ...
});

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

肯定的是,顺序是问题的一部分。 - Subtubes

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

0

以下是您需要确保所需内容正常工作的检查点

  1. 获取require-jquery.js并将其放置在您的/js-root目录中

  2. 在HTML中,在闭合的</body>标签之前添加:<script data-main="/js-root/main-js-file-name" src="/js-root/require-jquery.js"></script>

  3. 获取适用于AMD的underscore,并将其放置在/js-root目录中

  4. main-js-file-name.js中编写:

写:

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

同样地,在您的非主要 AMD JS 文件中,当定义一个模块时,使用_,如下所示:
define(["jquery", "underscore"], function ($, _) {
    ...
    return theModuleObjectOrFunction;
});

0

这完全取决于脚本所在的位置。 由于我没有看到您指定baseUrl,因此baseUrl将是默认值, 这意味着有两种可能:

  1. 您的脚本直接位于html文件中,在您的情况下, 它将在html文件的同一目录中查找underscore.js
  2. 您的脚本位于由您的html文件引用的javascript文件中, 现在它将在您自定义的javascript文件的目录中搜索underscore.js。

检查underscore.js是否实际存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接