Javascript 加载requirejs和jquery时出错
我正在用requirejs和jquery为AMD做一个简单的演示。 以下是我的文件夹结构:Javascript 加载requirejs和jquery时出错,javascript,jquery,requirejs,Javascript,Jquery,Requirejs,我正在用requirejs和jquery为AMD做一个简单的演示。 以下是我的文件夹结构: ├── index.html └── js ├── lib │ ├── jquery.js │ └── require.js └── main.js 在我的index.html文件中,我有以下内容: <head> <script data-main="js/main" src="js/lib/require.js"></s
├── index.html
└── js
├── lib
│ ├── jquery.js
│ └── require.js
└── main.js
在我的index.html文件中,我有以下内容:
<head>
<script data-main="js/main" src="js/lib/require.js"></script>
</head>
<body>
<div id="hello"> </div>
</body>
但是当我这样做时,我得到一个错误:uncaughttypeerror:undefined不是main.js第3行中的函数
怎么了?我不明白?我试过你的例子,在main.js的第一行中没有“$”,它工作正常
修复了main.js的问题:
define(['lib/jquery'], function () {
$("#hello").html("Wow this works!");
});
这就是你想要的。datamain
属性只指向它的相对请求的根。因此,您需要直接或通过脚本标记或内联脚本块中的require()
调用在main中加载
我的理解是,这是因为jquery是如何定义自己的。它正在使用命名的定义调用:
define( "jquery", [], function () { return jQuery; } );
所以现在,如果您需要'lib/jquery'
,它将无法工作。您必须准确地要求'jquery'
才能让它工作
编辑:
如果要将jquery放入lib/
文件夹中,并将您的基本url作为lib/
(lib/./
)的父文件夹,可以使用如下垫片:
define(['lib/jquery'], function ($) {
$("#hello").html("Wow this works!");
});
requirejs.config({
baseUrl: 'js',
shim: {
'lib/backbone': {
deps: ['lib/underscore', 'lib/jquery'],
exports: 'Backbone'
},
'lib/underscore': {
exports: '_'
},
'lib/jquery': {
exports: '$'
}
}
});
requirejs(['lib/jquery'], function($) {
// use $
});
您是否定义了调用Sjury库?在html上只需调用require.js脚本执行时,#hello
是否可能不存在?我也尝试过:require(['lib/jquery'],function($){$(function(){$(“#hello”).text(“哇,这很有效!”;})代码>这也给出了同样的错误。你们看了吗?根据我对文档的阅读,define首先获取一个数组,然后将该数组中的值传递给一个匿名函数。因此,我将$传递给该函数,我的实现有什么问题吗?我不太确定,但尝试console.log
匿名函数的参数-它将返回未定义的
(在我播放代码时就是这样做的)。因此jQuery的$
被未定义的变量覆盖,因此没有可用的jQuery函数。这只是创建了对全局对象$
的隐式依赖,这在某种程度上违背了将jQuery作为模块加载的初衷。-1。这会导致uncaughtreferenceerror:define未定义frommain.js
。另外:datamain
所做的不仅仅是“指向它的相对请求的根”。在OP的示例中,模块id为main
。在[()上,它清楚地说明;//这将不起作用定义(['lib/jquery'],函数($){…});如果您不配置requirejs,它将不起作用。但是正如您所看到的,我在需要它之前已经配置了它。我的意思是您不应该使用'lib/jquery'
requirejs.config({
baseUrl: 'js',
shim: {
'lib/backbone': {
deps: ['lib/underscore', 'lib/jquery'],
exports: 'Backbone'
},
'lib/underscore': {
exports: '_'
},
'lib/jquery': {
exports: '$'
}
}
});
requirejs(['lib/jquery'], function($) {
// use $
});