1

我目前正在尝试将我的应用程序推送到 Heroku。我已经能够部署它几次,但现在我已经在我的 packages.json 文件中将 mongoose 从 ">= 3.5.0" 更新为 ">= 3.6.0rc0" 。但是,3.6 版需要 mpath 和 mpromise。

当 slug 编译开始时,它使用缓存版本的猫鼬或其他东西,当我的应用程序启动时,我得到“错误:找不到模块'mpath'”。

我试图设置一个自定义 buildpack Git 来停止缓存,我只是在 bin/compile 中注释掉了缓存内容,可在此处获得:https ://github.com/jValdron/heroku-buildpack-nodejs

这是推送的输出:http: //pastebin.com/L3Yqy2NR

此外,当我从 package.json 中删除一些依赖项时,如果我使用“heroku run bash”登录,我可以看到那些在 node_modules 中删除的依赖项。我已经尝试删除 node_modules 文件夹并执行另一个“git push”,但也没有用。而那些被移除的 deps 仍然在 node_modules 中。

任何人都知道如何解决这个问题?

编辑:

这是我的 package.json 文件:

{
    "name": "souply-api",
    "version": "0.1.0",
    "author": "Jason Valdron <jason.valdron@orangesprocket.com>",
    "description": "Main gears that runs the Soup.ly application",
    "dependencies": {
        "bcrypt": ">= 0.7.3",
        "express": ">= 3.0.5",
        "extend": ">= 1.1.3",
        "imagemagick": ">= 0.1.3",
        "jade": ">= 0.27.7",
        "knox": ">= 0.4.6", 
        "less": ">= 1.3.1",
        "less-middleware": ">= 0.1.9",
        "moment": ">= 1.7.2",
        "mongoose": ">= 3.6.0rc0", 
        "mongoose-types": ">= 1.0.3",
        "node-native-zip": ">= 1.1.0",
        "nodemailer": ">= 0.3.37",
        "oauth2orize": ">= 0.1.0",
        "passport": ">= 0.1.15",
        "passport-local": ">= 0.1.6",
        "passport-google": ">= 0.2.0",
        "passport-facebook": ">= 0.1.4",
        "passport-twitter": ">= 0.1.4",
        "passport-http": ">= 0.2.1",
        "passport-http-bearer": ">= 0.2.0",
        "passport-oauth2-client-password": ">= 0.1.0",
        "poor-form": ">= 1.1.3",
        "request": ">= 2.12.0",
        "socket.io": ">= 0.9.13"
    },
    "engines": {
        "node": "0.8.x",
        "npm": "1.1.x"
    }
}

Mongoose 设置为 3.6.0rc,如前所述。Mpath 是 Mongoose 的 package.json 文件中的一个依赖项。如果我查看我的本地 mongoose package.json 文件,我可以看到:

"dependencies": {
    "hooks": "0.2.1"
  , "mongodb": "1.2.11"
  , "ms": "0.1.0"
  , "sliced": "0.0.3"
  , "muri": "0.3.0"
  , "mpromise": "0.2.0"
  , "mpath": "0.1.1"
}

此外,如果我使用 登录heroku run bash并导航到node_modules/mongoose/node_modules我会看到 mpath 和 mpromise 不存在。

4

5 回答 5

5

node_modules 在 Git 存储库中。通过从 repo 中删除它,它工作正常。

于 2013-02-08T13:49:30.033 回答
3

现在 heroku 支持禁用 node_modules 的缓存:https ://devcenter.heroku.com/articles/nodejs-support#cache-behavior

Heroku 维护一个缓存目录,该目录在构建之间持久化。此缓存用于存储 npm、yarn 和 bower 的缓存。如果您愿意,可以禁用 Node.js 应用程序的所有缓存:

heroku config:set NODE_MODULES_CACHE=false git commit -am 'disable node_modules cache' --allow-empty git push heroku master

于 2017-02-21T17:10:50.043 回答
0

您需要将您的 package.json 更新为您正在使用的最新版本的 mongoose

您还需要将 mpath 添加到您的 package.json 中(在 mongoose 条目之前)

你可以发布你的 package.json 文件吗?

于 2013-02-08T02:44:02.787 回答
0

删除 node_modules 的缓存并重新部署它:

git rm -r --cached node_modules

进而git push heroku master

如果您不想在重新部署时缓存 node_module,也可以禁用缓存:

heroku config:set NODEMODULESCACHE=false
git commit -am 'rebuild' --allow-empty
git push heroku master
heroku config:unset NODEMODULESCACHE
于 2017-08-28T20:55:22.077 回答
0

更改 package.json 中的 Node 版本为我做了这件事。

例如:

"engines": {
    "node": "9.2.1"
}
于 2017-12-16T09:45:58.203 回答