Za każdym razem, gdy tworzę projekty, muszę pobrać wszystkie zależności modułów węzłów. Bez kopiowania node_modules, czy istnieje możliwość udostępniania centralnych node_modules w wielu projektach?
jak poniżej, za każdym razem muszę uruchamiać wiele poleceń.
npm install gulp-usemin
npm install gulp-wrap
npm install gulp-connect
npm install gulp-watch
npm install gulp-minify-css
npm install gulp-uglify
npm install gulp-concat
npm install gulp-less
npm install gulp-rename
npm install gulp-minify-html
require
modułu d. W przeciwnym razie nie, nie ma oficjalnego „centralnego”node_modules
folderu do użytku z programemrequire()
.npm install <npm_package_name> -g
Odpowiedzi:
Absolutnie możesz współdzielić katalog node_modules między projektami.
Z dokumentacji węzła :
Więc po prostu umieść folder node_modules w katalogu swoich projektów i umieść w nim dowolne moduły. Po prostu wymagaj ich jak zwykle. Gdy węzeł nie znajdzie katalogu node_modules w folderze projektu, automatycznie sprawdzi folder nadrzędny. Więc stwórz swoją strukturę katalogów następującą:
W ten sposób nawet zależności twojego podprojektu mogą korzystać z twojego głównego repozytorium node_modules.
Jedną z wad robienia tego w ten sposób jest to, że będziesz musiał ręcznie zbudować plik package.json (chyba że ktoś zna sposób na zautomatyzowanie tego za pomocą pomruku lub czegoś podobnego). Kiedy instalujesz swoje pakiety i dodajesz --save arg do
npm install
polecenia, automatycznie dołącza je do sekcji zależności lub pliku package.json, co jest wygodne.źródło
Znalazłem sztuczkę, po prostu spójrz na łącza symboliczne (dowiązania symboliczne) w systemie Windows lub Linux , działa jak skróty, ale jest potężniejszy.
Po prostu musisz utworzyć folder
Junction
dla swojegonode_modules
folderu w dowolnym miejscu. Skrzyżowanie to nic innego jak skrót do oryginalnego folderu node_modules. Utwórz go w folderze projektu, w którym zostałyby utworzone rzeczywiste moduły node_modules, gdyby zostały użytenpm install
.Aby to osiągnąć, potrzebujesz przynajmniej jednego
node_modules
prawdziwego folderu, a następnie wykonaj połączenie z nim w innych projektach.W systemie Windows możesz użyć wiersza polecenia lub aplikacji. Korzystanie z wiersza polecenia daje nieco większą kontrolę, korzystanie z aplikacji jest łatwiejsze. Sugeruję rozszerzenie powłoki linków .
źródło
mklink /d node_modules (source dir)\node_modules
.node_modules
samego folderu projektu, to działa. Pamiętaj tylko, aby przejść do właściwegonode_modules
folderu przed zainstalowaniem czegokolwiek nowego: Pnpm install
w którejkolwiek z „połączonych” aplikacji?npm install <new-package>
wszystkie pakiety, których nie ma w pliku package.json twojego bieżącego projektu, są usuwane.Spróbuj pnpm zamiast npm.
Zainstaluj za pomocą:
Aby zaktualizować istniejące instalacje (i podkatalogi), użyj:
Lub użyj skrótu polecenia (pozostaw off -r, jeśli chcesz kierować tylko na jeden katalog)
źródło
Tak powinien wyglądać katalog główny
node_modules Project 1 Project 2 Project 3 Project 4
po prostu otwórz plik
Project 1/.angular-cli.json
zmienić schemat
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
do
"$schema": "./../node_modules/@angular/cli/lib/config/schema.json"
i nie zapomnij utworzyć
node_modules
pustego folderu w katalogu projektuźródło
Patrząc na niektóre artykuły, wydaje się, że Lerna jest dobrym narzędziem do zarządzania wieloma projektami w jednym katalogu (
monorepo
). Obsługuje udostępnianie modułów bez duplikowania całych pakietów w każdym folderze i poleceń instalowania ich w wielu projektach.pnpm to także proste i wydajne narzędzie, które nie powiela tych modułów, które są już zainstalowane dla innych projektów.
źródło
Zobacz również obsługę obszarów roboczych npm w wersji 7.0.0
https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
źródło
Załóżmy, że mając jeden moduł node_modules, powinien zawierać wszystkie pakiety dla wszystkich aplikacji. dzięki temu Twoje aplikacje będą również udostępniać większość unikatowych wpisów package.json (tylko nazwa powinna się zmienić)
mój pomysł byłby taki, aby mieć jeden root i wiele poziomów src, jak poniżej
jedynym problemem, z którym możesz się spotkać, byłoby utworzenie kopii zapasowej json (lub tsconfig) dla dowolnej aplikacji i przywrócenie ich podczas pracy nad nią lub skonfigurowanie skryptów startowych do obsługi dowolnej aplikacji
źródło