【发布时间】:2016-01-06 02:55:53
【问题描述】:
我正在尝试运行一个使用 PouchDB(本地 CouchDB 实现)的 node.js 应用程序。我可以在本地成功运行它,甚至可以上传它并在我的 Bluemix 实例上构建它。但是,每当我向我的应用程序发送请求时,我都没有收到响应,并且我在 Bluemix 控制台中看到以下错误:
[Error: Module version mismatch. Expected 46, got 14. This generally implies that leveldown was built with a different version of node than that which is running now. You may try fully removing and reinstalling PouchDB or leveldown to resolve.]
我尝试将npm rebuild 添加到npm install 上方的构建管道中,我可以看到它确实进行了重建。但是,我仍然收到以前的错误。
关于我的应用程序的一些信息:它是用于 Slack 平台的机器人。用户发送命令,然后我的 Bluemix 应用程序会做出响应。我的 Bluemix 应用程序有多个 PouchDB 存储的文档。正如我所说,所有这些都在我的开发机器上运行并正确响应。
这是我的 package.js 供参考:
{
"name": "XXXXXXXXXXX",
"version": "0.x.0",
"description": "XXXXXXXXXXXX",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"repository": {
"type": "git",
"url": "XXXXXXXXXXX"
},
"keywords": [
"slack",
"bot",
"nodejs"
],
"author": "xxxxxxxxx",
"license": "MIT",
"dependencies": {
"bluebird": "^3.1.1",
"body-parser": "^1.14.2",
"cfenv": "^1.0.3",
"cheerio": "^0.19.0",
"express": "^4.13.3",
"pouchdb": "^5.1.0",
"request-promise": "^1.0.2"
},
"engines": {
"node": "^4.2.x",
"npm": "^2.14.x"
}
}
还有一些额外的历史:当我使用 MongoDB 而不是 PouchDB 时,我在 Bluemix 上运行了我的应用程序的早期版本。我当时的节点版本是 Bluemix 在我开始时给我的默认版本,即版本 0.12.x。但是,这个版本不支持箭头功能,我现在大量使用。因此,节点 4.2.x 的碰撞。
谢谢!
编辑:经过一番挖掘,我发现'leveldown'(PouchDB 的依赖项)在可用的情况下使用了 npm 预构建。这意味着,如果在他们的 GitHub 上提供了预构建版本,那么为了方便起见,它将被下载而不是源代码。查看日志,我注意到版本 1.4.2 正在通过 Bluemix 作为预构建版本下载。但是,有一个可用的版本1.4.3 看起来可以解决我的'Expected 46, got 14` issue。所以新的问题是 Bluemix 为什么要这样做,我该如何纠正它?
【问题讨论】: