Javascript Require.js忽略baseUrl

Javascript Require.js忽略baseUrl,javascript,requirejs,Javascript,Requirejs,好吧,这让我发疯了,也许有人能给我指出正确的方向 我将最新的require.js与jquery结合使用作为我的模块加载器。我正在使用datamain属性指向带有baseUrl的配置文件。当我尝试加载模块时,baseUrl被忽略,require正在尝试从与main.js相同的位置加载 /js/main.js require.config({ baseUrl: '/js/vendor/' }); require.config({ baseUrl: '/js/vendor/' });

好吧,这让我发疯了,也许有人能给我指出正确的方向

我将最新的require.js与jquery结合使用作为我的模块加载器。我正在使用
datamain
属性指向带有
baseUrl
的配置文件。当我尝试加载模块时,
baseUrl
被忽略,require正在尝试从与
main.js
相同的位置加载

/js/main.js

require.config({
    baseUrl: '/js/vendor/'
});
require.config({
    baseUrl: '/js/vendor/'
});

require(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
require.config({
    baseUrl: '/js/vendor/',
    deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
/path/to/page.html

<script data-main="/js/main" src="/js/vendor/require-jquery.js"></script>
<script>
require(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
</script>

需要(['jquery','bootstrap'],函数($){
$(函数(){
log('helloworld!');
});
});
期望值:

加载<代码>http://localhost:3000/js/vendor/bootstrap.js和日志
你好,世界

实际值:

尝试加载
http://localhost:3000/js/bootstrap.js
--失败:'(


我已经尝试在require script标记中使用相对路径而不是绝对路径来处理
data main
src
。我所做的一切似乎都不会触发
baseUrl
。我是否完全缺少文档中的某些内容?

问题在于require.js异步加载脚本(这就是requirejs背后的要点)因此,当您在加载require之后立即将
require()
添加到脚本标记中时,此脚本将在加载
js/main.js
之前执行

简单的方法是将所有这些都包含在
main.js
中,或者创建一个新文件来保存这篇文章并从js/main加载它

/js/main.js

require.config({
    baseUrl: '/js/vendor/'
});
require.config({
    baseUrl: '/js/vendor/'
});

require(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
require.config({
    baseUrl: '/js/vendor/',
    deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
--或--

/js/main.js

require.config({
    baseUrl: '/js/vendor/'
});
require.config({
    baseUrl: '/js/vendor/'
});

require(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
require.config({
    baseUrl: '/js/vendor/',
    deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
/js/boostrap.js

require.config({
    baseUrl: '/js/vendor/'
});
require.config({
    baseUrl: '/js/vendor/'
});

require(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});
require.config({
    baseUrl: '/js/vendor/',
    deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
    $(function() {
        console.log('hello world!');
    });
});

注意
require()
已成为引导文件中的
define()
,您的配置正在异步模式下执行。当建立第一个
require
调用时,您的配置尚未应用。根据文档:

加载
require.js
时,它将注入另一个脚本标记 (带有async属性)用于
scripts/main.js

因此,只需在同步模式下执行配置:

<script src="/js/vendor/require-jquery.js"></script>
<script src="/js/main.js"></script>
<script>
require(['jquery', 'bootstrap'], function($) {
  $(function() {
    console.log('hello world!');
  });
});
</script>

需要(['jquery','bootstrap'],函数($){
$(函数(){
log('helloworld!');
});
});

更多信息:

谢谢Simon。我在EJS中使用布局和分区,所以我实际上使用了第三个选项,即在添加任何JS之前定义一个全局require对象,我将我的选项放在那里。文档在这里讨论: