Ошибка: не удается найти модуль «mkdirp» при отправке приложения nodejs на героку

Я делаю 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 в моем модуле jade, который находится внутри 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"
  }
}

Кто-нибудь может посоветовать? Спасибо!


person gruuuvy    schedule 01.05.2012    source источник


Ответы (2)


Я исправил это, выполнив npm install mkdirp, а затем нажав.

Однако я получаю предупреждение об отсутствии mkdirp и использовании по умолчанию только что установленного. Наверное, потому что я знаю, что у меня также определенно есть mkdirp внутри node_modules как jade, так и stylus?

В любом случае, приложение уже развернуто.

person gruuuvy    schedule 01.05.2012

При рассмотрении ошибки она связана не с 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 <[email protected]>",
  "main": "./lib/jade.js",
  "bin": { "jade": "./bin/jade" },
  "engines": { "node": ">= 0.1.98" }
}

Вы заметите, что не указано, что mkdirp является зависимостью, но может потребоваться (я не копался в исходниках).

Я успешно запустил Jade 0.25.0 на Heroku, но никогда не пробовал более старые версии.

person Aaron Powell    schedule 01.05.2012
comment
Я изменил свою версию Jade на 0.25.0, но все равно получаю ту же ошибку. Любые другие возможные идеи? - person gruuuvy; 01.05.2012