Miałem to samo pytanie (patrz Avoid npm refresh after every deployment on Heroku).
Heroku wymusza pobieranie/kompilację/etc. sekwencja, ponieważ muszą uruchomić aplikację z pustym hasłem: czyszczenie wcześniej usuniętych plików, kiedy przenoszą aplikację na inny serwer, podczas przydzielania nowych internetowych dynów itp.
Kwestia jest wyraźnie związana z rodzimymi pakietami i rekompilacja. W przypadku wszystkich pakietów js-only zatwierdzam je za pomocą mojego projektu i usuwam je z pliku package.json. Zyskuje kilka sekund, ale nie za wiele.
Zdecydowanie będę w stanie wstępnie skompilować i zatwierdzić natywne moduły (z powodzeniem uruchomię wkhtml2pdf na Heroku, na przykład z binariami skompilowanymi dla linux-amd64), jeśli uzyskasz dostęp do Linuksa (lub VM) w tej samej konfiguracji - na dzień dzisiejszy, Linux [...] 2.6.32-350-ec2 #57-Ubuntu SMP [...] x86_64 GNU/Linux
.
Chociaż nie poleciłbym tego jako ostatecznego rozwiązania, ponieważ może się kiedyś złamać - nie wydaje mi się, że heroku gwarantuje platformę, na której działa aplikacja.
Pakiet [build-pack] (https: // github.com/heroku/heroku-buildpack-nodejs) (który jest kodem, który przekształca twój kod źródłowy na to, co zostanie wdrożone na Heroku) powinien już buforować 'node_modules' pomiędzy kompilacjami. Przynajmniej tak mówi w README. Jesteś pewien, że to właśnie spowalnia twoją kompilację? – friism
@friism Wydaje mi się, że używają standardowego buforowania NPM, więc moduły muszą zostać rozpakowane, skopiowane i, co najważniejsze, ponownie skompilowane po każdym naciśnięciu. Jeśli masz moduły z rozwiązłym drzewem zależności lub w zależności od rozszerzeń C++ (mongodb, socket.io, itp.), To zajmuje to trochę czasu. –