jQuery在子文件夹中不使用RequireJS

jQuery在子文件夹中不使用RequireJS,requirejs,Requirejs,我有以下文件夹结构: index.html js/ 自由基/ require.js jquery.js main.js 在index.html中,我在head部分添加了以下行: <script data-main="js/main" src="js/libs/require.js"></script> 在chrome web inspector中,我看到jquery成功加载,但文本没有出现在我的div中。当我将jquery移出/js/libs并将其放入/js

我有以下文件夹结构:

  • index.html
  • js/
    • 自由基/
      • require.js
      • jquery.js
    • main.js
在index.html中,我在head部分添加了以下行:

<script data-main="js/main" src="js/libs/require.js"></script>
在chrome web inspector中,我看到jquery成功加载,但文本没有出现在我的div中。当我将jquery移出
/js/libs
并将其放入
/js
(当然,将依赖项更改为
['jquery']
)时,它就可以工作了

我做错了什么?为什么我不能将jquery放在
/js/libs
中以保持事情的有序性

如果我配置了路径,谢谢

require.config({
    paths: {
        'jquery': 'libs/jquery'
    }
});
并将要求更改为:

require(['jquery'], function ($) {
    $('#test').html('123');
});

它似乎在工作。如果有人能解释为什么。

您必须提供basePath才能正常工作。 在您的情况下,它只是js。您可以在main.js文件的开头执行此操作

require.config({
    baseUrl: '/js'
});
在这之后,这段代码将起作用,因为它将把baseUrl与您的相对url连接起来

require(['libs/jquery'], function ($) {
    $('#test').html('123');
});

是否有可能在main.js运行时DOM没有准备好,因此
#test
没有更新?尝试将测试代码包装在
$(function(){…})中
当jQuery调用
define
(AMD模块定义/提供给任何AMD加载程序的方式)时,它为自己提供模块名
jQuery
。现在,如果您调用
require(['lib/jquery'],…)
它将在
lib
中找到
jquery.js
,加载文件并计算出它没有命名为
lib/jquery
,而只是
jquery
。因此,不是您正在寻找的模块。至少我是这样理解这个问题的。即使在函数回调中没有$reference,它也可以工作,因为jQuery reference在全局范围内。为了避免这种情况,您需要将jQuery定义为一个模块,解决名称冲突并将其作为对象返回。类似于define([“jQuery”],function(){return jQuery.noConflict(true);});
require(['libs/jquery'], function ($) {
    $('#test').html('123');
});