Bagaimana cara npm menginstal ke direktori yang ditentukan?

Jawaban:

325

Anda dapat menggunakan --prefixopsi ini:

mkdir -p ./install/here/node_modules
npm install --prefix ./install/here <package>

Paket kemudian akan diinstal di ./install/here/node_modules. The mkdirdiperlukan karena NPM mungkin sebaliknya memilih yang sudah ada node_modulesdirektori lebih tinggi dalam hirarki. (Lihat dokumentasi npm di folder .)

coudy
sumber
65
Tampaknya Anda harus memiliki file package.json di direktori alternatif ini jika Anda menggunakan opsi --prefix. Apakah ada cara untuk memiliki package.json di direktori saat ini dan menginstal ke direktori alternatif?
2
@fractal Lihat jawaban saya untuk itu
yunzen
10
@coundy Apakah ada cara untuk menentukan path untuk npm install(tanpa nama paket)? Saya menghubungkan ini secara langsung, tetapi kemudian npm mencari package.jsondi {prefix}. Apa yang saya juga bertujuan adalah untuk dapat membiarkan packages.jsondalam proyek root dan pada saat yang sama menginstal semua paket {project root}/{project webroot}.
automatix
Saya mengalami masalah rekursi. Apakah ada cara untuk membuatnya berjalan sekali? Saya memecahkannya sementara dengan mengubah direktori dan kemudian memanggil npm install, tetapi --prefixsepertinya solusi yang lebih baik, jika tidak menyebabkan rekursi.
adi518
47

Dalam dokumentasi itu dinyatakan: Gunakan opsi awalan bersama dengan opsi global :

The awalan konfigurasi default untuk lokasi di mana simpul diinstal. Pada kebanyakan sistem, ini adalah / usr / local . Di windows, ini adalah lokasi yang tepat dari biner node.exe. Pada sistem Unix, ini satu tingkat naik, karena simpul biasanya dipasang di {awalan} / bin / simpul daripada {awalan} /node.exe .

Ketika flag global diatur, npm menginstal sesuatu ke dalam awalan ini. Ketika tidak disetel, ia menggunakan root dari paket saat ini, atau direktori kerja saat ini jika belum ada dalam paket.

(Penekanan oleh mereka)

Jadi di direktori root Anda, Anda dapat menginstal

npm install --prefix <path/to/prefix_folder> -g

dan itu akan menginstal node_modulesfolder ke folder

<path/to/prefix_folder>/lib/node_modules
Yunzen
sumber
2
Anda tidak dapat requiremenginstal paket secara global, bukan?
Pavlo
3
@Pavlo Apakah ini membantu? stackoverflow.com/questions/15636367/…
yunzen
1
Anda harus menambahkan ini ke jawabannya.
Pavlo
6
@Pavlo Saya rasa tidak. Itu bukan jawaban untuk OP.
yunzen
@ Poplo Jika suatu paket diinstal secara global Anda memerlukannya dengan cara yang sama seperti biasa. Jadi ya Anda dapat memerlukan paket yang diinstal secara global.
Rob Evans
43

Pada npm versi 3.8.6, Anda dapat menggunakan

npm install --prefix ./install/here <package>

untuk menginstal di direktori yang ditentukan. NPM secara otomatis membuat node_modulesfolder bahkan ketika node_modulesdirektori sudah ada di hierarki yang lebih tinggi. Anda juga dapat memiliki package.jsondi direktori saat ini dan kemudian menginstalnya di direktori yang ditentukan menggunakan --prefixopsi:

npm install --prefix ./install/here

Pada npm 6.0.0, Anda dapat menggunakan

npm install --prefix ./install/here ./

untuk menginstal package.json di direktori saat ini ke direktori "./install/here". Ada satu hal yang saya perhatikan pada Mac yang membuat symlink ke folder induk di dalam direktori node_modules. Tapi, masih berfungsi.

CATATAN: NPM menghormati jalur yang telah Anda tentukan melalui --prefixopsi. Ini menyelesaikan sesuai dokumentasi npm pada folder , hanya ketika npm installdigunakan tanpa --prefixopsi.

Rohit Sharma
sumber
1
Ini sepertinya tidak berhasil, saya selalu dapatkanCan't install <current directory>: Missing package name
Tibor Blenessy
1
@TiborBlenessy Dengan asumsi Anda berbicara tentang pernyataan pemasangan kedua. Pastikan Anda memiliki file package.json yang valid di direktori Anda saat ini. Jika masih tidak berfungsi, beri tahu saya versi npm Anda. Langkah-langkah ini digunakan untuk bekerja dengan versi npm yang ditentukan. Dan, jika mereka tidak lagi, saya ingin menyelam lebih dalam dan sampai ke akar permasalahan dan mungkin saya bisa menemukan alternatif.
Rohit Sharma
1
@RohitSharma Menggunakan npm 6.0.0 metode ini tidak berfungsi seperti yang diharapkan dalam package.jsonfile./install/here
Christian Ivicevic
@ChristianIvicevic Anda dapat menggunakan npm install --prefix ./install/here ./ untuk menginstal package.json di direktori saat ini ke direktori "./install/here". Ada satu hal yang saya perhatikan pada Mac yang membuat symlink ke folder induk di dalam direktori node_modules. Tetapi, ia masih bekerja dengan npm 6.0.0
Rohit Sharma
1
@ Tanoro Perintah ketiga akan bekerja dengan npm 6.0.0 dengan pembuatan symlink seperti yang disebutkan dalam jawaban. Saya belum pernah mencoba 2 perintah pertama dengan npm v3.5.2 itulah sebabnya saya telah menyebutkan versi spesifik dari npm yang saya coba. Silakan memperbarui jawaban dengan perintah yang berfungsi untuk versi lain juga.
Rohit Sharma
0

Saya menggunakan build PowerShell dan tidak bisa menjalankan NPM tanpa mengubah direktori saat ini.

Akhirnya menggunakan perintah mulai dan hanya menentukan direktori kerja:

start "npm" -ArgumentList "install --warn" -wo $buildFolder
Malachy
sumber