Jak zaimportować Moduły globalne do węzła? Dostaję "błąd: nie można znaleźć modułu"?

[5]}próbuję skonfigurować węzeł na Mac OSX Lion. Wszystko wydaje się działać ok, ale nie mogę importować żadnych modułów z mojego folderu global modules. I get the error,

Error: Cannot find module <module>

Jeśli uruchamiam to: node -e require.paths, otrzymuję 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. Kiedy próbuję uruchomić skrypt, jednak dostaję 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/"
Będę wdzięczny za pomoc. nie mam pojęcia, dlaczego nie mogę zaimportować żadnych bibliotek.
 100
Author: Evan Carroll, 2011-11-01

8 answers

Jeśli używasz npm > = 1.0, możesz użyć npm link <global-package> do utworzenia lokalnego łącza do pakietu już zainstalowanego globalnie. (Zastrzeżenie: system operacyjny musi obsługiwać dowiązania symboliczne.)

Jednak to nie przychodzi bez problemów.

Npm link jest narzędziem programistycznym. To jest niesamowite do zarządzania pakietami w lokalnym pudełku deweloperskim. Ale wdrożenie z npm link jest w zasadzie proszenie o problemy, ponieważ sprawia, że bardzo łatwo jest aktualizować rzeczy, nie zdając sobie sprawy to.

Jako alternatywę można zainstalować pakiety lokalnie jak i globalnie.

Aby uzyskać dodatkowe informacje, zobacz

 84
Author: Tadeusz Wójcik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-03 00:12:36

Możesz użyć npm link, aby utworzyć dowiązanie symboliczne do globalnego pakietu w folderze projects.

Przykład:

$ npm install -g express
$ cd [local path]/project
$ npm link express

Wystarczy utworzyć lokalny folder node_modules, a następnie utworzyć dowiązanie symboliczne express -> [global directory]/node_modules/express, które może być następnie rozwiązane przez require('express')

 55
Author: Nick Sotiros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 23:10:36

Węzeł.js używa zmiennej środowiskowej NODE_PATH, aby umożliwić określenie dodatkowych katalogów do włączenia w ścieżce wyszukiwania modułu. Możesz użyć npm, aby dowiedzieć się, gdzie przechowywane są moduły globalne za pomocą polecenia npm root -g. Więc łącząc te dwa razem, możesz upewnić się, że globalne moduły są zawarte w ścieżce wyszukiwania za pomocą następującego polecenia (w Linux-ish)

export NODE_PATH=$(npm root --quiet -g)

 39
Author: Joel B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 19:40:12

Zainstaluj dowolny pakiet globalnie, jak poniżej:

$ npm install -g replace  // replace is one of the node module.

Ponieważ ten moduł replace jest zainstalowany globalnie, więc jeśli widzisz folder modułów węzła, nie widzisz tam modułu replace i nie możesz użyć tego pakietu za pomocą require ('replace').

Ponieważ z require możesz używać tylko lokalnych modułów, które są obecne w folderze modułu węzła.

Teraz aby użyć modułu globalnego należy połączyć go ze ścieżką modułu węzła używając poniższego polecenia.

$ npm link replace

A teraz wróć i zobacz swoje folder modułu węzła możesz teraz zobaczyć tam zastąp moduł i możesz go używać z require ('replace') w aplikacji, ponieważ jest on połączony z Twoim lokalnym modułem węzła.

Pls daj mi znać, jeśli potrzebne są dalsze wyjaśnienia.

 18
Author: user5341372,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-27 08:06:27

Możesz użyć require ze ścieżką do globalnego katalogu modułu jako argumentu.

require('/path/to/global/node_modules/the_module');

Na moim Macu używam tego:

require('/usr/local/lib/node_modules/the_module');

Jak znaleźć swoje moduły globalne? -- >gdzie npm instaluje Pakiety?

 7
Author: ling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:41

Ustawienie zmiennej środowiskowej NODE_PATH tak, aby wskazywała na Twój globalny katalog node_modules.

W Windows 7 lub wyższym ścieżka jest podobna do %AppData%\npm\node_modules, podczas gdy w Unixie może być podobna do /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 znalezieniu właściwej ścieżki.

W systemach uniksowych można to wykonać za pomocą następującego polecenia:

export NODE_PATH=`npm config get prefix`/lib/node_modules/
 1
Author: Ben Xu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-26 01:46:58

Używam Dockera. Próbuję stworzyć obraz dokera, który ma zainstalowane wszystkie moje zależności węzłów, ale może używać mojego lokalnego katalogu aplikacji w czasie uruchamiania kontenera(bez zanieczyszczania go katalogiem node_modules lub linkiem). 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')

 0
Author: Darin London,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 16:02:47

require.paths jest przestarzały.

Przejdź do folderu projektu i wpisz

npm install socket.io

To powinno zainstalować go w lokalnym ./ node_modules folder, w którym node będzie go szukał.

Trzymam swoje rzeczy tak:

cd ~/Sites/
mkdir sweetnodeproject
cd sweetnodeproject
npm install socket.io

Utwórz aplikację.plik js

// app.js
var socket = require('socket.io')

Teraz uruchom moją aplikację

node app.js

Upewnij się, że używasz npm >= 1.0 i node >= 4.0.

 -1
Author: Jamund Ferguson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-28 06:26:29