如何确定Node.js项目中缺少的依赖项

时间:2015-06-04 04:08:34

标签: node.js openshift

我正在尝试将我的Node.js项目部署到OpenShift,并在尝试查看该网站时获得503。

我从研究中了解到,这表明我的网络服务器项目存在问题。通过检查日志,我已经确定这似乎是缺少依赖性的问题。但是,日志似乎并没有告诉我哪一个:

module.js:340
    throw err;
          ^
Error: Cannot find module '/var/lib/openshift/551c63f85973ca05430002b8/app-root/runtime/repo/server.js'

我已经确认了所有需要的包裹"我的网络服务器存在于package.json文件中,并存在于node_modules文件夹中。

{
  "name": "NekoList",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "~1.12.4",
    "cookie-parser": "~1.3.5",
    "debug": "~2.2.0",
    "ejs": "~2.3.1",
    "express": "~4.12.4",
    "mongoose": "^4.0.3",
    "morgan": "~1.5.3",
    "node-gyp": "^2.0.1",
    "secure-random": "^1.1.1",
    "serve-favicon": "~2.2.1"
  }
}

运行npm installnpm update时,我没有错误。我确实收到有关debug ~2.2.0未满足的依赖关系的警告,但我在另一个项目中也有同样的警告,并且它不会导致严重故障。我没有使用此模块的代码。它就在那里,因为它是模板的一部分。

minimist@0.0.8 node_modules/node-gyp/node_modules/mkdirp/node_modules/minimist
npm WARN unmet dependency /var/lib/openshift/551c63f85973ca05430002b8/app-root/runtime/repo/node_modules/express/node_modules/finalhandler requires debug@'~2.2.0' but will load
npm WARN unmet dependency undefined,
npm WARN unmet dependency which is version undefined

此外,使用Webstorm内置服务器,项目在我的本地开发环境中运行良好。

我希望知道我可以做些什么来修复,或者至少可以解释问题的根源。

提前致谢。

[编辑] 因此,根据Saba Hassan的说法,看起来节点正在尝试运行不存在的文件server.js,而不是我定义的入口点,bin/www

所以,我添加了一个名为server.js的文件和基本的示例服务器。 Openshift仍无法找到该文件。相同的错误消息。 [/编辑]

[解决] 我的结论是,这个问题的基本假设是不正确的。我赞同一个答案,解释了为什么OpenShift在插入点的错误位置。但是,我开始这个线程来弄清楚为什么我得到了一个缺少的依赖错误。即使在实现下面的解决方案之后,我仍然会收到相同的错误消息,即错过依赖项。

解释如下:

出于某种原因,插入点文件或其所需的任何文件的任何问题都将返回错误,指出缺少插入点文件模块。

我在一个文件中有一些变量没有为OpenShift配置,OpenShift日志中包含的最有用的错误消息是根模块丢失了。

结论"缺少依赖性"错误可能只是意味着您在整个项目中的某处出现某种逻辑错误。 [/解决方案]

2 个答案:

答案 0 :(得分:4)

我认为您正在从错误的目录运行node server.js命令。导航到server.js文件所在的目录,然后运行命令。

答案 1 :(得分:2)

您正在使用"scripts"属性,但在OpenShift上,您确实应该使用"main"。这是因为OpenShift使用node-supervisor来启动和管理您的Node.js应用程序。看起来如果您没有提供"main",则默认为server.js