Pytanie nodeJS require.paths rozwiązać problem


Próbuję wymagać pliku względnie i tajemniczo, co następuje

Działa to dobrze, co wskazuje /Users/marcos/Desktop/Taper/lib/utils.js

myPath = "/Users/marcos/Desktop/Taper/lib/./utils";
require(myPath);

To nie znaczy, ale powinno wskazywać dokładnie ten sam plik:

require.paths.unshift("/Users/marcos/Desktop/Taper/lib")
require("./utils"); //Doesn't work with './'
require("utils"); //Works Fine

Każdy wie, czemu nie mogę nadal korzystać ./ w tym przypadku do ładowania ścieżki od

require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils")

prowadzi do:

"/Users/marcos/Desktop/Taper/lib/utils"

tak czy inaczej?

Z góry dziękuję


9
2018-03-22 12:04


pochodzenie


Pamiętaj, że mówią docs proszę unikać modyfikowania require.paths - Martijn
Dzięki Martjin Zgadzam się, ale chodzi o to, że jest to prosty pakiet tekstowy, który czyta STDIN i dodaje aktualny process.cwd() do wymaganej ścieżki, dzięki czemu użytkownicy będą mogli szybko uruchamiać kod węzła, bez konieczności zmiany bieżących wymaganych ścieżek. - zanona
Stany węzła 0.6, które wymagają.paths zostały usunięte Zamiast tego należy użyć folderów node_modules lub zmiennej środowiskowej NODE_PATH. - Rwky


Odpowiedzi:


ZAKTUALIZOWANE:

Od dokumentacja:

Moduł poprzedzony prefiksem '/' jest bezwzględną ścieżką do pliku. Dla   przykład, require('/home/marco/foo.js') załaduje plik w    /home/marco/foo.js.

Moduł poprzedzony prefiksem './' jest względne do wywoływania plików require().   To jest, circle.js musi znajdować się w tym samym katalogu co foo.js dla    require('./circle') znaleźć to.

Bez wiodącego znaku "/" lub "./" wskazującego plik, moduł również   "moduł podstawowy" lub jest ładowany z node_modules teczka.

Jeśli podana ścieżka nie istnieje, require() rzuci błąd z   jego code właściwość ustawiona na 'MODULE_NOT_FOUND'.


Oto oryginalna odpowiedź, która odnosi się do require.paths (które nie jest już obsługiwane):

Od dokumentacja:

W węźle require.paths jest tablicą ciągów reprezentujących ścieżki do wyszukania modułów kiedy nie są poprzedzone prefiksem '/', './', lub '../'.

(nacisk mój)


17
2018-03-22 13:43



Ach, ok, teraz to ma sens :) więc jeśli niektóre z powyższych napisów są wymienione, po prostu ignoruje sekcję ścieżek. Myślę więc, że nie ma sposobu, aby to osiągnąć, niestety, dzięki Martjin - zanona
Być może dobrym rozwiązaniem będzie znalezienie i zastąpienie tych prefiksów process.stdin i dołącz process.cwd() do niego :) może działać - zanona
@ludicco: nie jest możliwe, aby Twoi użytkownicy umieścili utils.js w node_modules / katalog gdzieś w górę ścieżki? - Martijn


Możesz przekazać to za pomocą NODE_PATH

Przykład:

NODE_PATH=`pwd` node app.js

5
2017-11-10 17:42





Stworzyłem nowy moduł węzła o nazwie "rekuire"

pozwala "wymagać" bez użycia względnych ścieżek

to duża oszczędność czasu, jeśli chodzi o testowanie / refaktoryzację

https://npmjs.org/package/rekuire

super łatwy w użyciu


3
2018-03-28 10:07



Szukałem kodu źródłowego dla rekuire i zauważyłem, że zaczyna szukać plików js wykonując ./../../../. Czy to oznacza, że ​​mam kilka projektów węzłów w tym samym folderze głównym, że mogą one w końcu udostępnić kod? - eSniff
nie, chodzi tylko o utworzenie folderu podstawowego, w szczególności uniemożliwiłem modułom krwawienie między zależnościami. - Nadav Leshem
Wielkie dzięki za odpowiedź ... :) - eSniff