Próbuję skonfigurować Node w systemie Mac OSX Lion. Wygląda na to, że wszystko działa dobrze, ale nie mogę zaimportować żadnych modułów z mojego globalnego folderu modułów. Otrzymuję błąd,
Error: Cannot find module <module>
Jeśli uruchomię to node -e require.paths
:, otrzymam odpowiedź:
[ '/usr/local/lib/node_modules',
'/Users/Me/.node_modules',
'/Users/Me/.node_libraries',
'/usr/local/Cellar/node/0.4.12/lib/node' ]
Co jest poprawne, moje moduły są rzeczywiście zainstalowane w / usr / local / lib / node_modules. Jednak kiedy próbuję uruchomić skrypt, otrzymuję to:
Error: Cannot find module 'socket.io'
at Function._resolveFilename (module.js:326:11)
at Function._load (module.js:271:25)
at require (module.js:355:19)
at Object.<anonymous> (/Users/Me/node/server.js:2:10)
at Module._compile (module.js:411:26)
at Object..js (module.js:417:10)
at Module.load (module.js:343:31)
at Function._load (module.js:302:12)
at Array.<anonymous> (module.js:430:10)
at EventEmitter._tickCallback (node.js:126:26)
Mój .bash_profile wygląda tak:
export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"
Naprawdę byłbym wdzięczny za pomoc, nie mam pojęcia, dlaczego nie mogę zaimportować żadnych bibliotek.
npm link
) można znaleźć tutaj: stackoverflow.com/a/15646750/2671392Odpowiedzi:
Jeśli używasz npm> = 1.0, możesz użyć
npm link <global-package>
do utworzenia lokalnego łącza do pakietu już zainstalowanego globalnie. ( Uwaga: system operacyjny musi obsługiwać dowiązania symboliczne ).Jednak nie obywa się to bez problemów.
Alternatywnie możesz zainstalować pakiety zarówno lokalnie, jak i globalnie.
Aby uzyskać dodatkowe informacje, zobacz
źródło
npm
pamięć podręczna (która żyje~/.npm
) ułatwi proces ponownej instalacji przeprowadzany w różnych lokalizacjach.Node.js używa zmiennej środowiskowej,
NODE_PATH
aby umożliwić określenie dodatkowych katalogów, które mają zostać uwzględnione w ścieżce wyszukiwania modułu. Możesz użyćnpm
samego siebie, aby powiedzieć, gdzie są przechowywane moduły globalne za pomocąnpm root -g
polecenia. Łącząc te dwa razem, możesz upewnić się, że moduły globalne są uwzględnione w ścieżce wyszukiwania za pomocą następującego polecenia (w systemie Linux)export NODE_PATH=$(npm root --quiet -g)
źródło
NODE_PATH
wskazówkę dotyczącą zmiennej środowiskowej. To bardzo pomogło!NODE_PATH
równoważną ścieżkę posix, aby npm działał na MSYS2. Dziękuję Ci..node_modules
folder można przeszukiwać, ale aby zaimportować moduły za pomocąrequire()
, powinny one nadal być zainstalowane w lokalnym katalogu projektu (lub alternatywnie połączone za pomocąnpm link
). Modułów globalnych nie można importować do projektów, można stamtąd uruchamiać tylko pliki binarne / skrypty.Możesz użyć łącza npm, aby utworzyć symboliczne łącze do pakietu globalnego w folderze projektów.
Przykład:
Wszystko, co robi, to utworzenie lokalnego folderu node_modules, a następnie utworzenie ekspresowego łącza symbolicznego -> [katalog globalny] / node_modules / express, który można następnie rozwiązać za pomocą
require('express')
źródło
Zainstaluj dowolny pakiet globalnie, jak poniżej:
Ponieważ ten moduł Replace jest instalowany globalnie, więc jeśli zobaczysz folder node modules, nie zobaczysz tam modułu replace i nie możesz użyć tego pakietu przy użyciu require ('replace').
ponieważ z require możesz używać tylko lokalnych modułów, które są obecne w folderze modułu twojego węzła.
Teraz, aby użyć modułu globalnego, należy połączyć go ze ścieżką modułu węzła za pomocą poniższego polecenia.
Teraz wróć i zobacz folder modułu węzła. Możesz teraz zobaczyć tam moduł zastępujący i użyć go z require ('replace') w swojej aplikacji, ponieważ jest on połączony z modułem lokalnego węzła.
Pls daj mi znać, jeśli potrzebne są dalsze wyjaśnienia.
źródło
Możesz użyć require ze ścieżką do globalnego katalogu modułu jako argumentu.
Na moim Macu używam tego:
Jak dowiedzieć się, gdzie są twoje globalne moduły? -> Gdzie npm instaluje pakiety?
źródło
Ustawienie zmiennej środowiskowej NODE_PATH tak, aby wskazywała na twój
node_modules
folder globalny .W systemie Windows 7 lub nowszym ścieżka jest podobna,
%AppData%\npm\node_modules
podczas gdy w systemie UNIX może być podobna,/home/sg/.npm_global/lib/node_modules/
ale zależy to od konfiguracji użytkownika.Polecenie
npm config get prefix
może pomóc w ustaleniu, która jest poprawna ścieżka.W systemach UNIX można to zrobić za pomocą następującego polecenia:
źródło
Używam Dockera. Próbuję utworzyć obraz Dockera, który ma zainstalowane wszystkie moje zależności węzłów, ale może używać mojego lokalnego katalogu aplikacji w czasie wykonywania kontenera (bez zanieczyszczania go katalogiem lub linkiem node_modules). Powoduje to problemy w tym scenariuszu. Moim obejściem jest wymaganie od dokładnej ścieżki, w której moduł, np. Require ('/ usr / local / lib / node_modules / socket.io')
źródło
require.paths
jest przestarzałe.Przejdź do folderu swojego projektu i wpisz
to powinno zainstalować go w lokalnym folderze ./node_modules, w którym węzeł będzie go szukał.
Trzymam moje rzeczy w ten sposób:
Utwórz plik app.js.
teraz uruchom moją aplikację
Upewnij się, że używasz
npm >= 1.0
inode >= 4.0
.źródło