在将Grunt应用程序部署到heroku时,NPM不会安装模块依赖项

Cal*_*ack 8 json heroku node.js gruntjs

我使用grunt创建了一个静态单页网站.我现在正尝试使用heroku-buildpack-nodejs-grunt将它部署到heroku,用于node grunt.

下面是我的根目录的图片:

项目根目录图像

这是我的Gruntfile package.json:

Procfile:

web: node index.html
Run Code Online (Sandbox Code Playgroud)

当我运行$ git push heroku master它到达Gruntfile并失败:

-----> Found Gruntfile, running grunt heroku:production task
>> Local Npm module "grunt-contrib-uglify" not found. Is it installed?
Run Code Online (Sandbox Code Playgroud)

上述错误继续列出未找到的所有本地NPM模块.如果我列出所有loadNpmTasks而不是使用"load-grunt-tasks",我会得到完全相同的错误.

$ heroku logs我得到:

Starting process with command `node web.js`
Error: Cannot find module '/app/web.js'
Run Code Online (Sandbox Code Playgroud)

谁能看到我出错的地方?

jak*_*lla 2

我唯一能想到的是,也许 Heroku 安装了你的devDependencies第一个,尝试运行 Grunt,但由于它还没有安装load-grunt-tasks,所以你没有得到该grunt.loadNpmTasks( 'grunt-contrib-uglify' );行(这load-grunt-tasks对你有用),因此 Grunt 找不到包裹。

您可以尝试更改您的方法Gruntfile以显式列出所有 npm 模块吗grunt.loadNpmTasks()

编辑:

刚刚想起我必须做的另一件事:

heroku labs:enable user-env-compile -a myapp
heroku config:set NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)

(显然替换myapp为您的 Heroku 应用程序名称。)

这使得 Heroku 允许用户设置环境变量,然后将您的服务器设置为production. 尝试一下,并将您的dependencies和设置devDependencies为您最初的设置(只是为了看看它是否有效)。