我正在开发一个使用多个NPM包的Dojo项目,其中一个是bluebird因为我需要在IE中使用Promise。我正在寻找将NPM包加载到我的项目中的最佳实践/推荐方法。
以下代码说明了我的问题:
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>
&#13;
为了在IE11中运行代码,我可以通过<script>
标记加载bluebird库(如代码所示)。但是,如果我想通过NPM管理库,我知道我可以通过npm install
,然后使用<script>
标记从我的磁盘中的node_modules
文件夹加载库,或者从node_modules
文件夹到dojoConfig
引用该库,但无论哪种方式,我都需要点击node_modules
文件夹并在那里引用该包。我不确定是否甚至建议这样做?例如,CommonJS明确建议不要这样做:http://requirejs.org/docs/node.html:
使用npm将仅包含节点的软件包/模块安装到项目node_modules目录中,但不要将RequireJS配置为查看node_modules目录。还要避免使用相关模块ID来引用仅为节点模块的模块。所以,不要做像需要的事情(&#34; ./ node_modules / foo / foo&#34;
如果我不应该通过物理路径引用驻留在node_modules
文件夹中的库(或任何其他NPM包),有没有更好的方法呢?我想在Dojo中加载它require([])
来电可能是最好的地方,但我不确定如何这样做。
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用npm install或bower来拉入您的项目blubird。 如果您的第三方库不在与dojo兼容的AMD中,您可以使用:
define([...,"path/to/thirdparty.js"], function(){
// ... your code
});
或使用:
require([...,"path/to/thirdparty.js"])
注意:
<script>
加载库,您可以使用dojo为其加载,如上面的代码段所示。