我正在使用requirejs来加载一些库和依赖项.
当我加载jQuery时,它的工作完美:
main.js
require.config({ shim: { jquery: { exports: '$' } }, paths: { jquery: 'vendor/jquery' } }); require([ 'vendor/jquery', 'app/init' ]);
应用程序/ init.js
define( ['jquery'], function ($) { $(document).ready(function () { console.log('domready'); }) } )
但是当我尝试添加下划线时,在网络面板中文件正确加载但在控制台中我得到了一个
未捕获的错误:模块的加载超时:下划线
发生了什么?我还尝试了require.config中的waitSeconds:200选项,但没有成功.
在最终(损坏)代码下面作为参考:
main.js
require.config({ shim: { jquery: { exports: '$' }, underscore: { exports: '_' } }, paths: { jquery: 'vendor/jquery', underscore: 'vendor/underscore', } }) require([ 'vendor/jquery', 'vendor/underscore', 'app/init' ])
应用程序/ init.js
define( ['jquery', 'underscore'], function ($, _) { $(document).ready(function () { console.log('domready'); }) } )
Louis.. 11
在define
和require
调用中,有时会将您的模块称为"vendor/
,有时也称为"
.这是错的.根据您显示的配置,您应该参考"
所有模块require
和define
调用模块.所以总是将jQuery和Underscore称为"jquery"
和"underscore"
,而不是"vendor/...
.当您使用完整路径引用它们时,可以绕过shim
配置.
实际上,您可以将require
通话更改为:
require(['app/init']);
你不需要在那里引用jQuery和Underscore.它们将在加载时app/init.js
加载,因为define
它们需要它们.
(此外,相对较新版本的jQuery不需要垫片,因为jQuery检测到它是由兼容AMD的加载器加载并调用define
自身.这不是问题的根源,但很高兴知道.)
在define
和require
调用中,有时会将您的模块称为"vendor/<name of module>"
,有时也称为"<name of module>"
.这是错的.根据您显示的配置,您应该参考"<name of module>"
所有模块require
和define
调用模块.所以总是将jQuery和Underscore称为"jquery"
和"underscore"
,而不是"vendor/...
.当您使用完整路径引用它们时,可以绕过shim
配置.
实际上,您可以将require
通话更改为:
require(['app/init']);
你不需要在那里引用jQuery和Underscore.它们将在加载时app/init.js
加载,因为define
它们需要它们.
(此外,相对较新版本的jQuery不需要垫片,因为jQuery检测到它是由兼容AMD的加载器加载并调用define
自身.这不是问题的根源,但很高兴知道.)