2013-08-20 7 views
33

Po grunt build ing mojej aplikacji AngularJS do mojego katalogu dist, chciałbym przetestować to z grunt server. Problem polega na tym, że grunt server wyświetla po prostu cały kod w moim katalogu app/. Pamiętaj też, że utworzyłem swoją aplikację pod numerem yo angular.Jak uruchomić pomruk serwera w katalogu dist zamiast katalogu aplikacji?

Oto kod zadanie serwera w moim Gruntfile.js

grunt.registerTask('server', [ 
    'clean:server', 
    'coffee:dist', 
    'compass:server', 
    'livereload-start', 
    'connect:livereload', 
    'open', 
    'watch' 
    ]); 

Czy istnieje sposób, aby grunt server służyć jedynie wbudowany kod w moim katalogu dist/?

Odpowiedz

28

To, czy możesz to zrobić, czy nie jest ważne. Ważne jest, aby nie używać tego serwera. Zadanie serwera w tępieniu, jak widać, powoduje wiele rzeczy, których nie potrzebujesz w folderze dist, a także fakt, że wszystkie zostaną zakodowane na stałe w folderze aplikacji.

Jeśli chcesz wypróbować wynik folderu dist, powinieneś po prostu przejść do katalogu dist, a następnie uruchomić prosty serwer HTTP, taki jak ten, który jest dostarczany z pythonem.

python -m SimpleHTTPServer 

To powinno uruchomić mały serwer, aby wypróbować katalog dist.

+1

To właśnie robię. Czasami mam katalog dowiązań (lub faktycznie wskazywany) na katalog kontrolowany przez Apache, więc mogę serwować go jako lokalny vhost blisko mojego rzeczywistego serwera produkcyjnego. Kolejną rzeczą, którą możesz/powinien zrobić w związku z tym, jest uruchamianie folderu dist podczas testowania, aby upewnić się, że zbudowane pliki rzeczywiście są takie same (tylko minified) jak pliki źródłowe. –

+0

@DerekR Dzięki za tę wskazówkę. Wypróbuję to. Dzięki, tak, to działa :) –

+0

@Ddie Monge Jr Jak uruchomić mój folder dist przez moje testowanie? Nie jestem pewien, co oznacza "moje testowanie". Ciekawe, aby się uczyć. –

3

Chociaż inni nie zalecili zrobienia tego, uważam, że właśnie tego szukacie. Robię coś takiego w moim pliku server.js, gdy używam express.

if (process.env.NODE_ENV == 'production') { 
    app.use(express.static('/dist')); 
}else{ 
    app.use(express.static('/app'));  
} 

Mam nadzieję, że to pomoże!

+2

dlaczego odradziliby to. –

114

Bardzo krótka odpowiedź jest

grunt serve:dist 

który działa z moim Yeoman generowane Gruntfile.js który zawiera:

grunt.registerTask('serve', function (target) { 
    if (target === 'dist') { 
     return grunt.task.run(['build', 'connect:dist:keepalive']); 
    } 

    grunt.task.run([ 
     'clean:server', 
     'bower-install', 
     'concurrent:server', 
     'autoprefixer', 
     'connect:livereload', 
     'watch' 
    ]); 
    }); 
+10

Ehm ... Myślę, że to jest właściwa odpowiedź! – Juanma

3

grunt serve:dist odpowiedź jest prawidłowa, ale proces ten jest dość irytujące, bo ciebie musisz skompilować cały twój projekt do trybu produkcyjnego za każdym razem, gdy wywołujesz: służyć: dist.

Co zrobiłem ja zmodyfikował Gruntfile.js w zadaniu serve, usunięcie zadania z parametrem przesłanym runbuild. Najpierw musisz ręcznie zbudować z grunt lub grunt build, a następnie zadzwonić pod numer grunt serve:dist i ręcznie otworzyć URL.

+0

Czy masz przykład tego? Dzięki –

+0

przeszukaj zadanie "podaruj", otrzymasz warunkowe '' 'if (target === 'dist') {' '', wewnątrz powinno zwrócić '' 'return grunt.task.run (['connect : dist: keepalive ']); '' ' –

+1

W każdym razie, aby zapobiec uruchomieniu nowej przeglądarki? – Stephane