1

我做 npm install -d,然后用 git heroku push master 推送我所有的东西。在我的 heroku 日志中,它会显示:

2012-05-01T00:21:37+00:00 heroku[web.1]: Starting process with command `node app.js`
2012-05-01T00:21:39+00:00 app[web.1]: 
2012-05-01T00:21:39+00:00 app[web.1]: node.js:201
2012-05-01T00:21:39+00:00 app[web.1]:               ^
2012-05-01T00:21:39+00:00 app[web.1]: Error: Cannot find module 'mkdirp'
2012-05-01T00:21:39+00:00 app[web.1]:     at Function._load (module.js:279:25)
2012-05-01T00:21:39+00:00 app[web.1]:     at Module.require (module.js:354:17)
2012-05-01T00:21:39+00:00 app[web.1]:         throw e; // process.nextTick error, or 'error' event on first tick
2012-05-01T00:21:39+00:00 app[web.1]:     at Function._resolveFilename (module.js:332:11)
2012-05-01T00:21:39+00:00 app[web.1]:     at require (module.js:370:17)
2012-05-01T00:21:39+00:00 app[web.1]:     at Object.<anonymous> (/app/node_modules/stylus/lib/middleware.js:16:14)
2012-05-01T00:21:39+00:00 app[web.1]:     at Module._compile (module.js:441:26)
2012-05-01T00:21:39+00:00 app[web.1]:     at Object..js (module.js:459:10)
2012-05-01T00:21:39+00:00 app[web.1]:     at Module.load (module.js:348:31)
2012-05-01T00:21:39+00:00 app[web.1]:     at Function._load (module.js:308:12)
2012-05-01T00:21:39+00:00 app[web.1]:     at Module.require (module.js:354:17)
2012-05-01T00:21:40+00:00 heroku[web.1]: Process exited with status 1
2012-05-01T00:21:40+00:00 heroku[web.1]: State changed from starting to crashed

显然,当我在本地部署时,我没有这个问题。我的玉模块中有 mkdirp 模块,它位于我的应用程序的 node_modules 中。

我也有Procfile:

web: node app.js

这是我的 package.json:

{
    "name": "gemini"
  , "version": "0.0.1"
  , "contributors": [ 
      { "name": "****", "email": "****" }
    ]
  , "private": true
  , "engines": { "node": ">= 0.2.0" }
  , "dependencies": {
      "express": "2.5.1"
    , "stylus": ">= 0.17.0"
    , "jade": "0.3.0"
  }
}

有人可以请教吗?谢谢!

4

2 回答 2

1

我通过执行 npm install mkdirp 然后推送来修复它。

虽然我收到了一个警告,因为缺少 mkdirp 并默认为我刚刚安装的那个。可能是因为我知道我在玉石和手写笔的 node_modules 中也肯定有 mkdirp ?

无论如何,该应用程序现在已部署。

于 2012-05-01T23:25:58.633 回答
0

在查看错误后,它与 Jade 无关,而与 Stylus 有关。这可能来自 Stylus 引用旧版本的问题,尽管使用>=应该意味着它将获取最新版本。

Heroku 推送应该列出 Heroku 检测到并安装的依赖项的模块。

您引用的 Jade 版本确实很旧,当前版本是0.25.0;你在哪里使用0.3.0

我查看了那个版本,这是package.json内容:

{
  "name": "jade",
  "description": "Jade template engine",
  "version": "0.3.0",
  "author": "TJ Holowaychuk <tj@vision-media.ca>",
  "main": "./lib/jade.js",
  "bin": { "jade": "./bin/jade" },
  "engines": { "node": ">= 0.1.98" }
}

您会注意到它没有指定 mkdirp 是一个依赖项,但它可能需要它(我没有深入研究源代码)。

我已经在 Heroku 上成功运行了 Jade 0.25.0,但从未尝试过旧版本。

于 2012-05-01T00:54:07.873 回答