繁体   English   中英

Node.js应用程序部署在heroku中

[英]Node.js app deploy in heroku

我的MEAN应用程序的文件结构如下:

root
|---> public
      |----> css
      |----> js
              |----> controller
              |----> app.js
      |----> views
      |----> index.html

|---> app
      |----> server.js
|---> node_modules
|---> bower_components
|---> gulpfile.js
|---> package.json
|---> Procfile

在这个应用程序中,我使用gulp运行public/index.html

gulpfile.js

var gulp = require('gulp');
var browserSync = require('browser-sync');
var server = require('gulp-live-server');

gulp.task('server', function() {
     live = new server('app/server.js');
     live.start();
})
gulp.task('serve', ['server'], function() {
   browserSync.init({
      notify: false,
      port: process.env.PORT || 8080,
      server: {
        baseDir: ['public'],
        routes: {
            '/bower_components': 'bower_components'
        }
      }
   });
    gulp.watch(['public/**/*.*'])
        .on('change', browserSync.reload);
});

然后使用REST APIapp通信。 这是在本地机器上工作。 我已将此项目上传到heroku

我的Procfile

web: node node_modules/gulp/bin/gulp serve

但它显示错误。 我在heroku logs有以下错误

2017-05-21T16:26:57.305350+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=myapp.herokuapp.com request_id=some-request-id fwd="fwd-ip" dyno= connect= service= status=503 bytes= protocol=https

2017-05-21T15:53:50.942664+00:00 app[web.1]: Error: Cannot find module '/app/node_modules/gulp/bin/gulp'

我的package.json文件:

 {
    "name": "myapp",
    "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1",
       "start": "gulp serve"
    },
    "repository": {
        "type": "git",
        "url": ""
    },
    "dependencies": {
        "async": "^2.4.0",
        "body-parser": "^1.17.2",
        "express": "^4.15.3",
        "mongoose": "^4.10.0",
        "morgan": "^1.8.1",
        "multer": "^1.3.0",
        "underscore": "^1.8.3"
    },
    "devDependencies": {
        "browser-sync": "^2.18.11",
        "gulp": "^3.9.1",
        "gulp-live-server": "0.0.30"
    }
}

有什么建议吗? 提前致谢。

你可能有gulp定义为发展依赖(下devDepenenies在你) package.json文件。 NODE_ENV 设置为production时,NPM仅安装devDependencies

当你部署到Heroku的, NODE_ENV=production ,所以gulp永远不会安装。 因此错误......

Error: Cannot find module '/app/node_modules/gulp/bin/gulp'

只需动gulp和其他任何需要从建立你的包devDependenciesdependencies 你可以让npm为你移动它..

npm uninstall --save-dev gulp
npm install --save gulp

对构建捆绑包所需的每个dev依赖项重复此操作。 或者你可以自己复制和粘贴它们。


这是一个没有理想解决方案AFAIK的常见问题。 NPM希望在生产中,您已经预先构建了文件。 就像你将它们发布到NPM一样。 但是,在heroku和其他推动部署解决方案时,情况并非如此。

Charlie Martin对于dev-dependencies--production标志(Heroku正确传递)是正确的。 你可以在nodejs docs中看到npm installpackage.json的 进一步解释 - 这个问题已在其他地方详细阐述过了

但是,我强烈建议您在部署时不要通过gulp 运行服务任务 ,而是定义您的npm脚本 start运行browserSync的CLI 这样, 您可以将gulp保持为dev依赖项

它可能看起来像这样: package.json

{
  ... other properties ...
  "scripts": {
    "start": "browser-sync start --port 8080 -s"
  },
  ... other stuff ...
}

Browsersync的文档非常好,所以你应该找到你需要的东西。 我会在本地调整它直到npm start并且gulp serve执行相同的操作,然后我将使用heroku进行部署以查看它是否有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM