Na podstawie uwag https://github.com/creationix/nvm/pull/97:
Podczas instalowania pakietów z KMP pomocą przełącznika globalnego -g pakiet kończy się w odpowiednim katalogu (tj .nvm/$ WERSJA/lib/node_modules) , jednak węzeł nie może go wymagać , ponieważ jakoś nie szuka jego prefiksu.
Więc za pomocą npm install -g xxxxx
położy modułów w odpowiedniej lokalizacji dla NVM ale jeśli spróbujesz require
jednego z nich węzeł nie może znaleźć modułu. Nadal się z tym bawię i zaktualizuję, jeśli znajdę rozwiązanie.
Aktualizacja
Skąd NPM umieścić node_modules? (zobacz https://docs.npmjs.com/files/folders)
- Instalacja lokalna (domyślnie): umieszcza elementy w ./node_modules bieżącego katalogu głównego.
- Instalacja globalna (z opcją -g): umieszcza elementy w/usr/local lub wszędzie tam, gdzie jest zainstalowany węzeł.
- Zainstaluj go lokalnie, jeśli zamierzasz go ustawić na
require()
.
- Zainstaluj go globalnie, jeśli zamierzasz uruchomić go w wierszu poleceń.
- Jeśli potrzebujesz obu, zainstaluj go w obu miejscach lub użyj
npm link
.
Więc co zrobiłem było uruchomić npm init
(patrz http://npmjs.org/doc/init.html) w moich projektów głównego katalogu, który wygenerował package.json. Teraz, gdy uruchamiam npm install xxxxx
, tworzy on katalog node_modules w moim folderze projektu (który dodaję do mojego .gitignore). Działa to w przypadku modułów, których wymagam w moim kodzie.
Dla poleceń, takich jak CoffeeScript, instaluję z npm install -g coffee-script
, który umieszcza go we właściwym katalogu (.nvm/$ VERSION/lib/node_modules). Chociaż nie mogę wymagać tych modułów (npm link powinien rozwiązać ten problem) mogę uruchamiać polecenia - tj. coffee
.
Nareszcie dobra odpowiedź na to pytanie, waliłem w to przez chwilę. –