2014-07-25 12 views
11

Mamy projekt węzła, który nie wymaga naszych własnych submodułów z ścieżki względnej, ale zamiast tego należy ustawić zmienną środowiskową NODE_PATH na lib, aby znaleźć wszystkie submoduły.Ustawienie NODE_PATH z poziomu aplikacji NodeJS

Chciałem obsłużyć ten standardowy przypadek w kodzie źródłowym programu, ale wydaje się, że to już niemożliwe.

Znalazłem kilka rozwiązań, które nie działają zgodnie z oczekiwaniami.

module.paths.push("./lib");

sugerowano w innym artykule stackoverflow ale to powoduje komunikat o błędzie w nowszych wersjach węzeł i odnosi wywoływacz do korzystania NODE_PATH.

Zamiast tego próbowałem wykonać następujące czynności jako pierwszą linię mojego programu.

process.env['NODE_PATH']="./lib";

ta nie powoduje komunikat o błędzie, ale to nie działa albo. Myślę, że ta zmienna jest odczytywana na początku aplikacji i nie jest odczytywana później, gdy żąda się czegoś.

+1

process.env ['NODE_PATH'] = "./ lib" zastępuje zawartość NODE_PATH i nie dodaje do niej. Może to twój problem. jeśli użyjesz process.env ['NODE_PATH'] + = ": ./ lib" zamiast tego powinno działać – txwikinger

+0

To, co widzę, to ustawienie programistyczne NODE_PATH działa w procesach roboczych, jeśli zostało ustawione w procesie nadrzędnym. Sam proces główny nie działa w ogóle. –

Odpowiedz

11

Wszystkie informacje można dowiedzieć się ze źródła: module.js

... NODE_PATH błąd jest generowany tylko przy dostępie poprzez require.paths.

Wyszukaj funkcję _nodeModulePaths: wystąpienie modułu ma ogólny obiekt Array paths, z wszystkimi ścieżkami wyszukiwania.

module.paths.unshift('./foo-baz'); 
var x = require('some-lib-name'); 
console.log(x); 

Więc teraz, jeśli masz wymaganego modułu pod ./foo-baz/some-lib-name/ byłoby poprawnie odebrać.

Jaka wersja węzła i jaki system posiadasz?

Powiązane problemy