【发布时间】:2019-06-10 13:43:08
【问题描述】:
简短介绍:我们开始使用 npm ci 来为我们的 react 应用程序安装更可靠的依赖项,而不是 install。但是我们在使用ci 时注意到了一些奇怪的promise 拒绝行为。
说明:
当在 NODE_ENV 设置为 development 的节点环境中运行 npm ci 时,我们会收到来自 Bluebird Promise 库的数百条 Promise 警告:
(node:95984) Warning: .then() only accepts functions but was passed: [object Object]
我很好奇这些是否来自 npm CI 的代码本身,因为除了使用 npm CI 时,我们从未见过这些错误。
您还可以在 their source code 中看到 NPM 正在使用 Bluebird Promise 库版本 3.5.3。
为了测试这一点,我逐步删除了 package.json 中的所有 main 和 dev 依赖项,生成锁定文件并运行 npm ci 以查看它是否源自任何特定的包,但它每次都会发生最后一个包(和备用的单个包)。
我还创建了一个完全独立的 npm 存储库并安装了一个包 (react-scripts@latest),生成了一个锁定文件,并在运行 npm ci 时收到了相同的承诺警告。
我们能够通过设置环境变量 BLUEBIRD_PROMISES=0 根据此 npm issue 的建议来消除构建错误,而这确实消除了警告。但我们想知道为什么会发生这种情况,以及这些警告背后是否有什么比简单地让它们沉默更值得关注的东西。
版本信息:
npm:6.4.1
节点:10.15.0
【问题讨论】:
标签: node.js npm promise continuous-integration bluebird