我如何找出 Node.js 项目中缺少的依赖项
How do I figure out what dependency is missing in a Node.js project
我正在尝试将我的 Node.js 项目部署到 OpenShift,但在尝试查看站点时出现 503。
我从研究中了解到,这表明我的网络服务器项目存在问题。通过检查日志,我确定这似乎是缺少依赖项的问题。但是,日志似乎没有告诉我是哪一个:
module.js:340
throw err;
^
Error: Cannot find module '/var/lib/openshift/551c63f85973ca05430002b8/app-root/runtime/repo/server.js'
我已验证我的网络服务器 "required" 中的每个包都存在于 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 install
或 npm 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 日志中包含的最有用的错误消息是根模块丢失。
结论 "missing dependency" 错误可能只是意味着您在整个项目的某处存在某种逻辑错误。
[/解决]
我认为你是从错误的目录中 运行ning node server.js
命令。导航到 server.js
文件所在的目录,然后 运行 命令。
您正在使用 "scripts"
属性,但在 OpenShift 上您确实应该使用 "main"
。这是因为 OpenShift 使用 node-supervisor 来启动和管理您的 Node.js 应用程序。看起来如果你不提供 "main"
它默认为 server.js
我正在尝试将我的 Node.js 项目部署到 OpenShift,但在尝试查看站点时出现 503。
我从研究中了解到,这表明我的网络服务器项目存在问题。通过检查日志,我确定这似乎是缺少依赖项的问题。但是,日志似乎没有告诉我是哪一个:
module.js:340
throw err;
^
Error: Cannot find module '/var/lib/openshift/551c63f85973ca05430002b8/app-root/runtime/repo/server.js'
我已验证我的网络服务器 "required" 中的每个包都存在于 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 install
或 npm 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 日志中包含的最有用的错误消息是根模块丢失。
结论 "missing dependency" 错误可能只是意味着您在整个项目的某处存在某种逻辑错误。 [/解决]
我认为你是从错误的目录中 运行ning node server.js
命令。导航到 server.js
文件所在的目录,然后 运行 命令。
您正在使用 "scripts"
属性,但在 OpenShift 上您确实应该使用 "main"
。这是因为 OpenShift 使用 node-supervisor 来启动和管理您的 Node.js 应用程序。看起来如果你不提供 "main"
它默认为 server.js