2016-10-17 14 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作为加载它适合你在上面的片段中。
相关问题