Pakiety zostaną wówczas zainstalowane ./install/here/node_modules. Jest mkdirto konieczne, ponieważ npm może w innym przypadku wybrać już istniejący node_moduleskatalog wyżej w hierarchii. (Zobacz dokumentację npm dotyczącą folderów .)
Wygląda na to, że musisz mieć plik package.json w tym alternatywnym katalogu, jeśli używasz opcji --prefix. Czy istnieje sposób, aby pakiet.json znalazł się w bieżącym katalogu i zainstalować w katalogu alternatywnym?
2
@fractal Zobacz moją odpowiedź na to
Junzen
10
@coundy Czy istnieje sposób na określenie ścieżki npm install(bez nazwy pakietu)? Sprawdziłem to bezpośrednio, ale potem npm szuka package.jsonw {prefix}. Moim celem jest również umożliwienie rootowi packages.jsonw projekcie rootowania i jednoczesne zainstalowanie wszystkich pakietów {project root}/{project webroot}.
automatix
Wystąpił problem z rekurencją. Czy jest sposób, aby powiedzieć, żeby uruchomił się raz? Rozwiązałem go tymczasowo, zmieniając katalog, a następnie dzwoniąc npm install, ale --prefixwydaje się, że jest to ładniejsze rozwiązanie, jeśli nie powoduje rekurencji.
adi518,
47
W dokumentacji jest powiedziane: Użyj opcji prefiksu razem z opcją globalną :
Prefiks config domyślne do miejsca, w którym jest zainstalowany węzeł. W większości systemów jest to / usr / local . W systemie Windows jest to dokładna lokalizacja pliku binarnego node.exe. W systemach Unix jest o jeden poziom wyżej, ponieważ węzeł jest zwykle instalowany w {prefix} / bin / node zamiast
{prefix} /node.exe .
Po ustawieniu flagi globalnej npm instaluje różne rzeczy w tym prefiksie. Gdy nie jest ustawiony, korzysta z katalogu głównego bieżącego pakietu lub bieżącego katalogu roboczego, jeśli nie jest już w pakiecie.
@Pavlo Jeśli pakiet jest zainstalowany globalnie, potrzebujesz go w taki sam sposób, jak zawsze. Więc tak, możesz wymagać pakietu instalowanego globalnie.
Rob Evans,
43
Od wersji npm 3.8.6 możesz używać
npm install --prefix ./install/here <package>
zainstalować w określonym katalogu. NPM automatycznie tworzy node_modulesfolder, nawet jeśli node_moduleskatalog już istnieje w wyższej hierarchii. Możesz również mieć package.jsonw bieżącym katalogu, a następnie zainstalować go w określonym katalogu za pomocą --prefixopcji:
npm install --prefix ./install/here
Począwszy od npm 6.0.0, możesz używać
npm install --prefix ./install/here ./
aby zainstalować pakiet.json w bieżącym katalogu do katalogu „./install/here”. Jest jedna rzecz, którą zauważyłem na Macu, że tworzy ona dowiązanie symboliczne do folderu nadrzędnego w katalogu node_modules. Ale nadal działa.
UWAGA: NPM honoruje ścieżkę określoną przez --prefixopcję. Rozwiązuje się zgodnie z dokumentacją npm na folderach , tylko gdy npm installjest używany bez --prefixopcji.
To nie wydaje się działać, zawsze rozumiemCan't install <current directory>: Missing package name
Tibor Blenessy
1
@TiborBlenessy Zakładając, że mówisz o drugiej instrukcji instalacji. Upewnij się, że masz poprawny plik package.json w bieżącym katalogu. Jeśli nadal nie działa, daj mi znać swoją wersję npm. Te kroki służyły do pracy z określoną wersją npm. A jeśli już nie będą, chciałbym zanurkować głęboko i dotrzeć do pierwotnej przyczyny i być może uda mi się wymyślić alternatywę.
Rohit Sharma
1
@RohitSharma Przy użyciu npm 6.0.0 ta metoda nie działa, ponieważ oczekuje package.jsonpliku w./install/here
Christian Ivicevic 30.04.18
@ChristianIvicevic Możesz użyć npm install --prefix ./install/here ./, aby zainstalować pakiet.json w bieżącym katalogu do katalogu „./install/here”. Jest jedna rzecz, którą zauważyłem na Macu, że tworzy ona dowiązanie symboliczne do folderu nadrzędnego w katalogu node_modules. Ale nadal działa z npm 6.0.0
Rohit Sharma
1
@Tanoro Trzecie polecenie będzie działać z npm 6.0.0 z tworzeniem dowiązań symbolicznych, jak wspomniano w odpowiedzi. Nigdy nie próbowałem pierwszych 2 poleceń z npm v3.5.2, dlatego wspomniałem o konkretnej wersji npm, z którą próbowałem. Zaktualizuj odpowiedź działającymi poleceniami również dla innych wersji.
Rohit Sharma
0
Korzystam z kompilacji PowerShell i nie mogłem uruchomić npm bez zmiany bieżącego katalogu.
Skończyło się na użyciu komendy start i po prostu określeniu katalogu roboczego:
Odpowiedzi:
Możesz użyć
--prefix
opcji:Pakiety zostaną wówczas zainstalowane
./install/here/node_modules
. Jestmkdir
to konieczne, ponieważ npm może w innym przypadku wybrać już istniejącynode_modules
katalog wyżej w hierarchii. (Zobacz dokumentację npm dotyczącą folderów .)źródło
npm install
(bez nazwy pakietu)? Sprawdziłem to bezpośrednio, ale potem npm szukapackage.json
w{prefix}
. Moim celem jest również umożliwienie rootowipackages.json
w projekcie rootowania i jednoczesne zainstalowanie wszystkich pakietów{project root}/{project webroot}
.npm install
, ale--prefix
wydaje się, że jest to ładniejsze rozwiązanie, jeśli nie powoduje rekurencji.W dokumentacji jest powiedziane: Użyj opcji prefiksu razem z opcją globalną :
(Nacisk przez nich)
Więc w swoim katalogu głównym możesz zainstalować
i zainstaluje
node_modules
folder w folderzeźródło
require
instalować pakietów globalnie, prawda?Od wersji npm 3.8.6 możesz używać
zainstalować w określonym katalogu. NPM automatycznie tworzy
node_modules
folder, nawet jeślinode_modules
katalog już istnieje w wyższej hierarchii. Możesz również miećpackage.json
w bieżącym katalogu, a następnie zainstalować go w określonym katalogu za pomocą--prefix
opcji:Począwszy od npm 6.0.0, możesz używać
aby zainstalować pakiet.json w bieżącym katalogu do katalogu „./install/here”. Jest jedna rzecz, którą zauważyłem na Macu, że tworzy ona dowiązanie symboliczne do folderu nadrzędnego w katalogu node_modules. Ale nadal działa.
UWAGA: NPM honoruje ścieżkę określoną przez
--prefix
opcję. Rozwiązuje się zgodnie z dokumentacją npm na folderach , tylko gdynpm install
jest używany bez--prefix
opcji.źródło
Can't install <current directory>: Missing package name
package.json
pliku w./install/here
Korzystam z kompilacji PowerShell i nie mogłem uruchomić npm bez zmiany bieżącego katalogu.
Skończyło się na użyciu komendy start i po prostu określeniu katalogu roboczego:
źródło