2016-05-29 75 views
0

我正在將我的應用程序轉換爲使用require.js,但似乎無法加載Bootstrap。這是在外形我在做什麼(以下假定一個簡單的平面目錄結構,沒有子目錄):RequireJS - 無法加載引導程序

main.js

requirejs.config({ 
    paths: { 
    "jquery": "jquery-1.12.4.min", 
    "bootstrap" : "bootstrap.min" 
    }, 
    shim: { 
    "bootstrap": { 
     deps: ["jquery"] 
    } 
    } 
}); 

require(["jquery"], function($) { 
    console.log($.fn); 
}); 

的index.html

<html> 
    <head> 
     <title>RequireJS Test</title> 
     <link rel="stylesheet" type="text/css" href="./bootstrap.min.css"> 
    </head> 
    <body> 
     <nav class="navbar navbar-default navbar-fixed-top"> 
     <div class="container"> 
     <ul class="nav navbar-nav"> 
      <li class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">File</a> 
       <ul class="dropdown-menu"> 
        <li><a href="#">Open...</a></li> 
        <li role="separator" class="divider"></li> 
        <li><a href="#">Save</a></li> 
        <li><a href="#">Save As...</a></li> 
       </ul> 
      </li> 
     </ul> 
     </div> 
    </body> 
    <script data-main="./main" src="./require.js"></script> 
</html> 

我的Bootstrap導航欄下拉菜單不起作用,事實上,當我在控制檯中調查jQuery對象本身時,我看不到任何從bootstrap.min.js附加的東西。但我看不出我做錯了什麼。我真正的應用程序也使用Backbone,並且沒有問題的加載。爲此,我使用以下墊片:

'backbone': { 
    'deps': ['jquery', 'underscore'], 
    'exports': 'Backbone' 
} 

但是Bootstrap的墊片對我來說不起作用。我錯過了明顯的東西嗎?

我使用的是requirejs,bootstrap和jQuery的最新版本。

回答

1

您尚未顯示任何實際會導致Bootstrap加載的代碼。更改初始require到:

require(["jquery", "bootstrap"], function($) { 
    console.log($.fn); 
}); 

如果這就是你的困惑來源於:你shim說:「當你加載bootstrap,負載jquery第一」。它不會觸發加載bootstrap。您必須列出bootstrap作爲對requiredefine的依賴關係才能進行加載。

+0

謝謝你,工作。事實上,這讓我感到困惑。我的印象是:requirejs.config只會加載所有內容,就像一堆腳本標記一樣。但我想這是AMD的'異步',對吧? – ChrisM

+1

'requirejs.config()'不會加載任何東西,除非您使用*頂級*處的'deps'選項來提供要加載的模塊列表。 (這個是在配置的最高層,它不同於'shim'內部的'deps')。注意頂級'deps'和* require(<在require.config'調用之後立即調用deps>)。 – Louis

+0

明白了。謝謝你的澄清。 – ChrisM