2016-09-29 40 views
1

所以我想讀取Require JS API -documentation找出如何做到這一點,但我一直無法加載一個庫,所以它不會被定義爲undefined 。我通過NPM-WebJars使用了這個功能,不過我想你應該怎麼定義它並不重要。RequireJS配置與模塊,沒有AMD支持

基本上,我試圖在我的項目中使用the react-bootstrap-switch -library。這是JavaScript-file source in Pastebin,因爲它可能在主分支中發生變化。 react-bootstrap-switch使用exports.default = Switch定義庫。我有幾個使用RequireJS定義的模塊,這些模塊有AMD支持並且正在工作。

這裏是我如何使用RequireJS

requirejs.config("paths":{"react-bootstrap-switch":["@routes.WebJarAssets.at("react-bootstrap-switch/15.0.0/dist/js/index")"]}}); // the file location 

使用庫

define(['react', 'react-bootstrap-switch'], function(React, Switch){ 
    console.log(Switch); // <- undefined 
} 

所以只有標準requirejs.config -import這是行不通的,因爲缺乏支持AMD。所以我想我應該使用墊片,但我該怎麼做?我一直在閱讀它,但我無法正確導入使用它的庫。這可能應該很容易,但它似乎並沒有工作。例如

requirejs.config({ 
      "paths":{"react-bootstrap-switch":["@routes.WebJarAssets.at("react-bootstrap-switch/15.0.0/dist/js/index")"]}, 
      "shim": { 
        "react-bootstrap-switch": { 
          exports: 'Switch' 
         }}}); 

使其未定義。我一直試圖用init函數來介入,但我無法在窗口內找到正確的名稱空間。還嘗試在路徑之前切換勻場順序,嘗試'默認'而不是'切換',以及其他一些技巧,但它似乎並沒有正確導入它,因爲它被卡住到未定義。

我可以嘗試的最後一件事是在本地獲取代碼並更改爲其他內容而不是exports.default,或者只是編寫自己的函數,但我希望將其用於將來參考。

回答

1

很明顯,您要加載的文件是經過轉換並且針對CommonJS環境的文件。這些文件不能像RequireJS那樣加載。

您將至少將其代碼在define(function (require, exports, module) {開頭處封裝,末尾爲});。一旦你這樣做,它可能工作。您可以使用r.js來執行包裝或任何其他工具。