2014-01-17 40 views
1

我想使用requireJS。但是,我有一个需要在DOM之前加载的库。然而,这与requireJS在加载requirejs之前加载JavaScript文件

<html> 
    <head> 
     <script data-main="/app" src="/require.js"></script> 
    </head> 

    <body> 
     <bar-foo/> 
    </body> 
</html> 

没有发生什么变化随着app.js

require.config({ 
    paths: { 
     'customElement': '/customElement', 
     'barfoo': '/barfoo' 
    }, 
    shim: { 
     barfoo: { 
      deps: [ 'customElement' ] 
     } 
    } 
}); 
define(['barfoo'], function() { 
    .... 
} 

例如,如果我只是在头(无requireJS)直接加载这个脚本,它工作正常。是否有需要配置选项,以便我可以立即加载特定文件(同步?)?

+0

如果您需要同步加载,请不要使用require.js。如果你不想异步加载,你为什么要使用它? – Pointy

+0

你也可以问:为什么要使用requirejs(使用例如'defer'属性代替)。无论如何,我已经更新了示例并添加了一个依赖项。在这种情况下,我认为使用requirejs –

+0

更合理,但我确定答案是“否”。你可以声明依赖关系,所以也许会有帮助。我不是一个requirejs专家,所以希望别人知道一个窍门。 – Pointy

回答

1

Requirejs以其异步功率而闻名。然而,当你需要某种要在其中的文件被加载,由于依赖的命令,在require.config有一个shim配置:

垫片:配置的依赖,出口和自定义初始化为老年人,传统的“浏览器全局”脚本不使用define()来声明依赖关系并设置模块值。

因此,让我们假设你有一个主干应用程序依赖于下划线和jQuery,并且希望他们能够按照这个顺序加载那么你会:

require.config({ 
paths: { 
    'Backbone': '/Backbone', 
    'Underscore': '/Underscore', 
    'jQuery': '/jQuery' 
}, 
shim: { 
    'Backbone': [ 'Underscore', 'jQuery' ] 
} 
}); 

require(['Backbone'], function(Backbone){ 
    //..... 
}); 

所以,RequireJS允许我们使用shim配置来定义需要按正确顺序加载的文件序列。

+0

true(我更新了我的示例,因为它不正确)。问题在于,仍然没有任何东西被强制同步加载(在DOM之前) –

+1

您可以将脚本src硬编码到dom中,或者看看这个:https://github.com/scriptfoundry/require -synchronous/blob/master/README.md –

+0

你提到的项目似乎不是很up2date –