2015-03-14 19 views
9

Neredeyse node, git, github ve Heroku için yeniyim ve derlememi derlememle karıştırmam gerekmeden uygulamanızı Heroku'ya göndermenin en iyi yolunu bulmak için uğraşıyorum , küçültülmüş uygulama ve Heroku'da çok fazla yapmadan.Gulp, Node app dist klasörünü Heroku'ya iletin

Benim node.js proje biraz şuna benzer: node_modules ve dist dışında

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

Herşey github girer.

Gulpfile, dist sürümünde kullanıma hazır olan her şeyi derler, minimize eder ve birleştirir. Sadece dist klasörünü Heroku'ya nasıl gelerek github'a koymayayım? En iyi uygulama nedir? Projeyi Heroku'ya göre çok daha fazla bağladığımdan, gulpfile'ımı paketin. sonrası kanca kullanmayan için

Nedenleri bu iki direğin iyi özetlenmiştir: https://stackoverflow.com/a/15050864/344022 & https://stackoverflow.com/a/21056644/344022, ne yazık ki alternatif anlamak kolay sağlamaz.

cevap

5

Heroku artık bununla gelişiminde statik buildpack sahiptir

.html sonek ile/dist dosyaları kullanmak için bir static.json dosyası oluşturun ve yeniden rota tüm (https://github.com/heroku/heroku-buildpack-static bakınız) gerekli dist/dizininin sağlanması için package.json betiklerini genişletir.
"scripts": { 
    ... 
    "heroku-postbuild": "gulp" 
} 

örneğin

için inşa Yani package.json o dev bağımlılıkları yüklü olsun Çoklu yapı inşa etmek ve dağıtmak, böylece paketleri
heroku config:set NPM_CONFIG_PRODUCTION=false --app 

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

Kişisel procfile içinde boş olabilir bu durum.

+0

Süper teşekkürler, bu gerçekten iyi çalışıyor. –

0

Devam edin, uygulamanızı oluşturan ve dosyaları sunulacağı yere kopyalar. Bu oldukça normal bir uygulamadır ve bir kez kurulduktan sonra yapmanız gereken, uygulamanızı dağıtmak için bir adımdır, ki bu gerçekten kullanışlı bir özelliktir. Alternatif olarak, dosyaları el ile kopyaladığınız ve bastığınız ayrı bir depoya sahip olmaktır, ancak bu benim için kaygan görünmüyor, bağımlılıkların üstesinden gelmek suretiyle insan hatası olasılığının artması ya da oluşturulmamış dosyaların silinmesinin unutulmasıdır. artık vb

+0

Bağımlılık yönetiminde insan hatası yok ya da gulpfile bunu benim için yaptığım gibi temizlemiyor. Mesaj kanca kullanmamanın nedenleri bu iki mesajda iyi toplanır: http: // stackoverflow.com/a/15050864/344022 & http://stackoverflow.com/a/21056644/344022, maalesef anlaşılması kolay bir alternatif sunmuyorlar. – conradj

+0

Belki de sizin için dağıtım yapmak için bir yontma görev yazmalısınız. Uygulamayı her zamanki gibi oluşturursunuz, daha sonra işiniz bittiğinde ikinci bağlantıdaki betiğe benzer bir şey yaparsınız. – liamness

0

Sadece dist klasörü heroku uygulamasına basmakla aynı problemi yaşadım, Şu anda farklı bir yaklaşım kullanıyorum, boş bir tane değil eminim, ama benim için çalışıyor. Bir dağıtma dosyası oluşturulur ve

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

Bir webpack inşa görevi sonrasında bu çalıştırıyorum, package.json repo Iformation tutulur ve burada okumak aşağıdaki kodu eklendi. Yani bu yeni yapmamı kahramana itecek. .git içindeki dist silinmiş olsa bile, onunla ilgilenir.