我正在使用一些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
文件夹加载库,或通过dojoConfig
从node_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([])
调用加载它可能是最好的地方,但我不完全知道如何做到这一点。
任何帮助将不胜感激。