【发布时间】:2016-10-17 20:41:34
【问题描述】:
我正在做一个 Dojo 项目,它使用了许多 NPM 包,其中一个是 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>
为了在IE11中运行代码,我可以通过<script>标签加载bluebird库(如代码所示)。但是,如果我想通过 NPM 管理库,我知道我可以通过 npm install 拉取它,然后使用 <script> 标记从磁盘中的 node_modules 文件夹加载库,或者从node_modules 文件夹到 dojoConfig,但无论哪种方式,我都需要进入 node_modules 文件夹并在那里引用包。我不确定是否建议这样做?例如,CommonJS 明确建议不要这样做:http://requirejs.org/docs/node.html:
使用 npm 将仅 Node 的包/模块安装到项目 node_modules 目录中,但不要将 RequireJS 配置为查看 node_modules 目录。还要避免使用相对模块 ID 来引用仅节点模块的模块。所以,不要做类似 require("./node_modules/foo/foo"
如果我不应该通过物理路径引用位于node_modules 文件夹中的库(或任何其他 NPM 包),有没有更好的方法?我正在考虑将它加载到 Dojo 的 require([]) 调用中可能是最好的地方,但我不完全确定如何这样做。
任何帮助将不胜感激。
【问题讨论】: