2017-05-21 3 views
7

にデプロイします。Node.jsのアプリは</strong>アプリを意味する、私は私の<strong>次のファイル構造を持っているHerokuの

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); 
}); 

とを使用して通信します。。これはローカルマシンで動作しています。このプロジェクトをherokuにアップロードしました。

マイProcfile

web: node node_modules/gulp/bin/gulp serve 

しかし、それがエラーを示しています。

{ 
    "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" 
    } 
} 

どれ提案:私は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ファイルを次のエラーがありますか?前もって感謝します。

+0

あなたの 'package.json'はどこにありますか?その内容は何ですか? – therobinkim

答えて

4

package.jsonファイルには、おそらくgulpが開発依存として定義されています(devDepenenies)。 NPMは、NODE_ENVでない場合、productionに設定されている場合にのみ、devDependenciesをインストールします。

herokuに展開するとき、NODE_ENV=productionなので、gulpはインストールされません。したがって、エラー...

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

ちょうどgulpを移動し、任意の他のdevDependenciesからdependenciesへのあなたのバンドルを構築するために必要とされます。あなたはnpmをあなたのために移動させることができます..

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

バンドルを構築するために必要な各デベロッパの依存関係に対してこれを繰り返します。または、コピーして貼り付けてください。


これは理想的なソリューションAFAIKがない場合の一般的な問題です。本番環境では、事前にファイルを事前に構築しておく予定です。あなたがNPMにそれらを出版していたならば、そうするでしょう。しかし、ヒロクなどのソリューションを展開する際には、そうではありません。

+0

なぜdownvote? –

0

Charlie Martinは正確でdev-dependencies--productionフラグ(Herokuが正しく渡します)です。 npm installpackage.jsonfurther explanation in the nodejs docs - この部分はhas been elaborated on elsewhereです。あなたのnpm scriptstartbrowserSync's CLIを実行するために

しかし、私は強く展開にあなたが定義し、代わりに一息経由でタスクを提供し実行していないをお勧めします。このようにして、は、dev依存関係としてgulpを維持することができます

これはおそらく、次のようになります。あなたが必要なものを見つける必要がありますので、 package.json

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

Browsersync's documentationはかなり良いです。 npm startgulp serveが同じことをするまで、私はそれをローカルで試してみると、それがうまくいくかどうかを調べるためにherokuと一緒に展開します。

関連する問題