2017-05-21 23 views
7

tôi có cấu trúc tập tin sau đây của tôi NGHĨA ứng dụng:Node.js ứng dụng triển khai trong Heroku

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

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

Trong ứng dụng này, tôi chạy public/index.html sử dụng gulp,

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

Sau đó liên lạc với app sử dụng REST API. Điều này đang làm việc trong máy địa phương. Tôi đã tải dự án này lên heroku.

My Procfile:

web: node node_modules/gulp/bin/gulp serve 

Nhưng Nó cho thấy lỗi. Tôi có lỗi sau vào 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 tập tin của tôi:

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

Bất kỳ đề nghị? Cảm ơn trước.

+0

Vị trí 'package.json' của bạn nằm ở đâu và nội dung của nó là gì? – therobinkim

Trả lời

4

Bạn có thể có gulp được định nghĩa là phụ thuộc phát triển (dưới devDepenenies) trong tệp package.json của mình. NPM chỉ cài đặt devDependencies khi NODE_ENVkhông được đặt thành production.

Khi bạn triển khai vào heroku, NODE_ENV=production, vì vậy gulp chưa bao giờ được cài đặt. Do đó lỗi ...

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

Chỉ cần di chuyển gulp và bất cứ điều gì khác là cần thiết cho việc xây dựng bó của bạn từ devDependencies để dependencies. Bạn có thể làm cho npm di chuyển nó cho bạn với ..

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

Lặp lại điều này cho mỗi phụ thuộc dev cần thiết để xây dựng gói của bạn. Hoặc bạn chỉ có thể sao chép và dán tất cả chính mình.


Đây là vấn đề phổ biến mà không có giải pháp lý tưởng AFAIK. NPM hy vọng rằng trong quá trình sản xuất, bạn sẽ có sẵn các tệp của mình. Như bạn sẽ làm nếu bạn xuất bản chúng cho NPM. Tuy nhiên, trong heroku và đẩy khác để triển khai các giải pháp, đây không phải là trường hợp.

+0

Tại sao lại là downvote? –

0

Charlie Martin chính xác về dev-dependencies và cờ --production (mà Heroku chuyển, chính xác). Bạn có thể xem further explanation in the nodejs docs cho npm installpackage.json - phần này của câu hỏi has been elaborated on elsewhere.

Tuy nhiên, tôi sẽ khuyên rằng trên triển khai bạn không chạy phục vụ nhiệm vụ qua ngụm và thay vào đó, định nghĩa của bạn npm scriptstart để chạy browserSync's CLI. Bằng cách này, bạn có thể giữ gulp như một phụ thuộc dev.

Nó có lẽ sẽ giống như thế này: package.json

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

Browsersync's documentation là khá tốt vì vậy bạn nên tìm những gì bạn cần. Tôi muốn fiddle với nó tại địa phương cho đến khi npm startgulp serve làm điều tương tự, sau đó tôi muốn triển khai với heroku để xem nếu nó làm việc.

Các vấn đề liên quan