2015-03-14 13 views
9

tôi là hợp lý mới để nút, git, github và Heroku và tôi đang phải vật lộn để tìm ra cách tốt nhất để gửi ứng dụng của tôi để Heroku mà không làm lộn xộn lên repo với biên soạn của tôi , ứng dụng được rút gọn và không làm quá nhiều trong Heroku.Gulp triển khai folder quận của ứng dụng Node để Heroku

dự án Node.js tôi trông hơi như thế này:

- client 
    ... code 
- server 
    ... code 
- node_modules 
- package.json 
- gulpfile.js 
- dist 
    - client 
    - server 

Tất cả mọi thứ ngoài node_modulesdist đi vào github.

Các gulpfile biên dịch, minifies và concatenates tất cả mọi thứ đã sẵn sàng cho ra mắt vào dist. Làm thế nào để đẩy chỉ thư mục dist để Heroku, mà không có cũng đưa nó vào github? Thực hành tốt nhất là gì? Tôi không muốn gửi gulpfile tôi để Heroku vì nó có nghĩa là di chuyển devDependencies trong package.json và sử dụng một kịch bản bài cập nhật, vì nó gắn các dự án để Heroku nhiều hơn tôi muốn.

Lý do không sử dụng móc sau được tóm tắt tốt trong hai bài đăng sau: https://stackoverflow.com/a/15050864/344022 & https://stackoverflow.com/a/21056644/344022, tiếc là chúng không cung cấp một cách dễ hiểu.

Trả lời

5

Heroku bây giờ có một buildpack tĩnh trong phát triển để xử lý này (xem https://github.com/heroku/heroku-buildpack-static)

Tạo một file static.json sử dụng các tập tin từ dist/với hậu tố .html và tái định tuyến tất cả gọi lại cho SPA

{ 
    "root": "dist/", 
    "clean_urls": true, 
    "routes": { 
     "/**": "index.html" 
    } 
} 

Mở rộng gói script.json để đảm bảo tên/thư mục là xây dựng, ví dụ

"scripts": { 
    ... 
    "heroku-postbuild": "gulp" 
} 

Vì vậy mà phụ thuộc dev từ package.json được cài đặt

heroku config:set NPM_CONFIG_PRODUCTION=false --app 

Nhiều xây dựng gói, do đó bạn có thể xây dựng và triển khai

heroku buildpacks:add heroku/nodejs --app <app_name> 
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-static.git --app <app_name> 

procfile của bạn có thể có sản phẩm nào trong trường hợp này.

+0

Siêu cảm ơn, điều này hoạt động thực sự tốt. –

0

Đi trên, thiết lập một cái móc bài đăng trên Heroku trong đó xây dựng bạn ứng dụng và bản sao các tập tin đến nơi mà họ sẽ được phục vụ. Đây là thực tế khá bình thường, và một khi nó được thiết lập, tất cả những gì bạn cần làm là đẩy git để triển khai ứng dụng của bạn, điều này thực sự khá tiện dụng. Cách khác là để có một kho lưu trữ riêng biệt mà bạn tự sao chép các tập tin vào và đẩy từ, nhưng điều đó dường như không như slick với tôi, cơ hội lớn hơn lỗi của con người bởi rối tung lên sự phụ thuộc, hoặc quên để xóa các tập tin được tạo ra mà không có còn cần thiết vv

+0

Không có lỗi của con người trong quản lý phụ thuộc hoặc làm sạch khi gulpfile thực hiện điều đó cho tôi. Lý do không sử dụng móc bài được tóm tắt tốt trong hai bài đăng này: http: // stackoverflow.com/a/15050864/344022 & http://stackoverflow.com/a/21056644/344022, tiếc là họ không cung cấp một cách dễ hiểu. – conradj

+0

Có lẽ bạn nên viết một nhiệm vụ gulp để thực hiện triển khai cho bạn sau đó. Bạn sẽ xây dựng ứng dụng như thường lệ, sau đó thực hiện tương tự như tập lệnh trong liên kết thứ hai sau khi hoàn tất. – liamness

0

Tôi đã gặp vấn đề tương tự khi chỉ đẩy thư mục dist vào ứng dụng heroku, Ngay bây giờ tôi đang sử dụng một cách tiếp cận khác, không chắc chắn cách nhàn rỗi, nhưng nó hoạt động cho tôi. Tôi tạo ra một tập tin triển khai và bổ sung vào mã bên dưới

import {spawnSync} from 'child_process'; 

    function deploy(){ 
    options = { 
     cwd: path.resolve(__dirname, './dist') 
    }; 
    //push dist folder to deploy repo 
    console.log('Initialising Repository'); 
    spawnSync('git',['init'],options); 
    console.log('Adding remote url'); 
    spawnSync('git',['remote','add', remote.name, remote.gitPath],options) 
    console.log('Add all files'); 
    spawnSync('git',['add','.','--all'],options) 
    console.log(`Commit with v${version}`); 
    spawnSync('git', ['commit','-m',`v${version}`], options) 
    console.log('Push the changes to repo'); 
    spawnSync('git', ['push', '-f', remote.name, 'master'],options) 
} 

giữ repo iformation trong package.json và đọc ở đây, tôi đang chạy này sau một webpack xây dựng nhiệm vụ. Vì vậy, điều này sẽ đẩy xây dựng mới của tôi để heroku. Ngay cả khi các .git bên trong dist bị xóa nó sẽ chăm sóc nó.

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