require(['underscore'], function ($, _) {
...
});
不起作用! (_
不是函数)
如何管理?
答案 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将是默认的, 这意味着,要么是两件事:
检查underscore.js是否确实存在。
答案 4 :(得分:0)
以下是检查点,以确保您需要的工作
获取require-jquery.js并将其放入/js-root
目录
在结束</body>
代码之前添加到您的HTML:<script data-main="/js-root/main-js-file-name" src="/js-root/require-jquery.js"></script>
获取underscore adapted for AMD,并将其放入/js-root
目录
在main-js-file-name.js
写:
require(["jquery", "underscore"], function ($, _) {
...
});
同样,在非主要的AMD JS文件中,在定义模块时,要使用_
,请写:
define(["jquery", "underscore"], function ($, _) {
...
return theModuleObjectOrFunction;
});