2016-10-17 36 views
1

我正在使用一些NPM軟件包的Dojo項目,其中一個是bluebird,因爲我需要在IE中使用Promise。我正在尋找最佳做法/推薦的方式將NPM軟件包加載到我的項目中。如何將Bluebird(從NPM中提取)作爲AMD模塊加載到Dojo項目中?

以下代碼是表示我的問題的例子:

require([ 
 
    'dojo/dom', 
 
    'dojo/request', 
 
    'dojo/domReady!' 
 
], function(dom, request) { 
 

 
    var message = dom.byId('greeting'); 
 
    message.innerHTML = "Getting started"; 
 

 
    var p1 = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
     resolve(true); 
 
    }, 1000); 
 
    }); 
 

 
    var p2 = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
     resolve(true); 
 
    }, 1000); 
 
    }); 
 

 
    var p3 = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
     resolve(true); 
 
    }, 1000); 
 
    }); 
 

 
    Promise.all([p1, p2, p3]).then(function() { 
 
    message.innerHTML = "All requests have been completed"; 
 
    }, function(error) { 
 
    message.innerHTML = error; 
 
    }); 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/1.2.2/bluebird.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js" data-dojo-config="async: true"></script> 
 
<div id="greeting"></div>

爲了運行在IE11的代碼,我可以通過一個<script>標籤加載藍鳥庫(如圖代碼)。但是,如果我想通過NPM管理庫,我知道我可以通過npm install,然後使用<script>標記從我的磁盤中的node_modules文件夾加載庫,或通過dojoConfignode_modules文件夾引用庫,但無論哪種方式,我都需要進入node_modules文件夾並在那裏引用包。我不確定是否建議這樣做?例如,CommonJS的明確建議不要這樣做:http://requirejs.org/docs/node.html

使用NPM安裝節點只包/模塊到項目node_modules目錄,但不配置RequireJS看的node_modules目錄內。還應避免使用相關模塊ID來引用僅限Node的模塊。所以,不要做類似要求(居住在通過其物理路徑的node_modules文件夾「./ node_modules /富/富」

如果我不應該引用庫(或任何其他NPM包),是有沒有更好的方式來做到這一點?我想在Dojo的require([])調用加載它可能是最好的地方,但我不完全知道如何做到這一點。

任何幫助將不勝感激。

回答

0

你可以使用npm install或bower來拉入您的項目blubird。 如果您的第三方庫不在與AMD兼容的AMD你可以使用:

define([...,"path/to/thirdparty.js"], function(){ 
    // ... your code 
}); 

或使用:

require([...,"path/to/thirdparty.js"]) 

注:

  • 你不需要用<script>加載庫,你可以使用Dojo作爲加載它適合你在上面的片段中。
相關問題