Saya mencoba untuk menginstal secara global dan kemudian menggunakan forever
dan forever-monitor
seperti ini:
npm install -g forever forever-monitor
Saya melihat output yang biasa dan juga operasi yang menyalin file ke jalur global, tetapi kemudian jika saya mencoba require("forever");
saya mendapatkan kesalahan mengatakan bahwa modul tidak ditemukan.
Saya menggunakan versi terbaru dari kedua node dan npm dan saya sudah tahu tentang perubahan yang dibuat npm dalam instalasi global vs lokal, tapi saya benar-benar tidak ingin menginstal secara lokal pada setiap proyek dan saya sedang bekerja pada platform yang tidak dapat mendukung link
sehingga npm link
setelah instalasi global tidak memungkinkan bagi saya.
Pertanyaan saya adalah: mengapa saya tidak bisa memerlukan paket yang terinstal secara global? Apakah itu fitur atau bug? Atau saya melakukan sesuatu yang salah?
PS: Hanya untuk membuatnya jelas: Saya tidak ingin menginstal secara lokal.
~/.config/yarn/global
untuk benangJawaban:
Di Node.js, mengharuskan tidak melihat di folder tempat modul global dipasang.
Anda dapat memperbaikinya dengan mengatur variabel lingkungan NODE_PATH. Di Linux ini akan:
Catatan: Ini tergantung di mana modul global Anda sebenarnya diinstal.
Lihat: Memuat dari folder global .
sumber
export NODE_PATH=/usr/local/lib/node_modules
sebagai gantinya.NODE_PATH
variabel lingkungan keC:\Users\{USERNAME}\AppData\Roaming\npm\node_modules
kemungkinan akan berfungsi.%AppData%\npm\node_modules
akan bekerja pada Windows 10.NODE_PATH
bisakah saya menggunakan modul global dan lokal secara bersamaan?NODE_PATH=$(npm root -g)
Setelah Anda menginstal paket secara global, Anda harus menghubungkan proyek lokal dengan paket global
Lihat di sini
sumber
~/some-stand-alone-random-nodejs-test.js
. Saya tidak ingin mengubah folder rumah saya menjadi direktori proyek. Saya tidak ingin membuat folder baru untuk setiap percobaan kecil.npm link <module>
Kemudian Anda akan melihat jalan pintas (tautan) yang dibuat dalam folder node_module proyek Anda yang merujuk pada modul global node.Permintaan maaf untuk necromancy tapi saya dapat menentukan jalur hard-coded ke modul yang diinstal secara global:
Ini tidak sempurna tetapi mengingat bahwa Unity3d mencoba untuk "mengkompilasi" semua javascript yang termasuk dalam direktori proyek saya benar-benar tidak dapat menginstal paket apa pun.
sumber
Saya tahu ini adalah pertanyaan lama, tetapi saya menemukan ini ketika mencoba melakukan beberapa versi memeriksa menggunakan
semver
dalampreinstall
skrippackage.json
. Karena saya tahu saya tidak bisa bergantung pada modul lokal yang diinstal, saya menggunakan ini untuk memintasemver
darinode_modules
folder global (sepertinpm
tergantung pada itu saya tahu ada di sana):Saya suka pendekatan ini karena ini tidak memerlukan pemasangan modul khusus apa pun untuk dapat digunakan.
Saya tidak menggunakan
NODE_PATH
solusi seperti yang disarankan orang lain karena saya ingin ini berfungsi pada mesin siapa pun, tanpa harus memerlukan konfigurasi / pengaturan tambahan sebelum menjalankannpm install
proyek saya.Cara ini dikodekan, itu hanya dijamin untuk menemukan modul tingkat atas (diinstal menggunakan
npm install -g ...
) atau modul yang dibutuhkan olehnpm
(tercantum didependencies
sini: https://github.com/npm/npm/blob/master/package.json ). Jika Anda menggunakan versi NPM yang lebih baru, ia mungkin menemukan dependensi dari paket yang diinstal secara global karena ada struktur yang lebih rata untuknode_modules
folder sekarang.Semoga ini bermanfaat bagi seseorang.
sumber
Sesuai dokumentasi , Node.js akan mencari di lokasi berikut secara default:
Path ditentukan dalam
NODE_PATH
variabel lingkungan .Catatan:
NODE_PATH
variabel lingkungan disetel ke daftar jalur absolut yang dipisahkan oleh titik dua.node_modules
Folder saat ini . (lokal)$HOME/.node_modules
(global)Catatan:
$HOME
adalah direktori home pengguna.$HOME/.node_libraries
(global)$PREFIX/lib/node
(global)Catatan:
$PREFIX
apakah Node.js dikonfigurasinode_prefix
.Untuk memeriksa nilai saat ini
node_prefix
, jalankan:Catatan: Awalan berhubungan dengan
--prefix
param selama build dan relatif terhadap paramprocess.execPath
. Jangan bingung dengan nilai darinpm config get prefix
perintah. sumberJika modul yang diberikan tidak dapat ditemukan, itu berarti tidak ada di salah satu lokasi di atas.
Lokasi folder root global tempat modul dipasang dapat dicetak oleh:
npm root -g
(secara default path dihitung pada waktu berjalan kecuali ditimpa dalamnpmrc
file ).Larutan
Anda dapat mencoba solusi berikut ini:
Tentukan lokasi modul global Anda dalam
NODE_PATH
variabel lingkungan. MisalnyaUntuk menguji dan mencetak nilai
NODE_PATH
, jalankan:Untuk solusi yang lebih permanen, tautkan
$HOME/.node_modules
folder pengguna global Anda untuk menunjuk ke folder root, dengan menjalankan perintah ini:Kemudian uji ulang melalui:
echo 'require("forever")' | node
perintah.Ubah sementara folder saat ini ke tempat ekstensi telah diinstal secara global, sebelum menjalankan skrip. Misalnya
Konfigurasikan tujuan instalasi global dalam
npm
file userconfig (lihat :)npm help 5 npmrc
atau denganuserconfig
param (--prefix
).Untuk menampilkan konfigurasi saat ini, jalankan:
npm config list
.Untuk mengedit konfigurasi saat ini, jalankan:
npm config edit
.Tentukan jalur lengkap lokasi modul simpul saat menelepon
require()
. MisalnyaInstal paket ke lokasi khusus, mis
Namun, instalasi akan gagal
~/.node_modules/lib/node_modules/
, sehingga lokasi masih perlu ditambahkan.Lihat: paket instalasi npm lokal ke lokasi kustom
Buat symlink di folder saat ini dari lokasi paket global. Misalnya
sumber
Anda dapat menggunakan paket
requireg
untuk memecahkan masalah ini:akan melakukan trik.
Juga, ada modul lain, yang
global-npm
khusus untuk hanya menggunakan globalnpm
, Anda dapat melihat kode pendek dan melihat bagaimana teknik ini bekerja.sumber
NODE_PATH
juga, bahwa Anda tidak perlu mengubah kode apa pun. (Kasus penggunaan saya menilai banyak proyek siswa, di mana saya tidak ingin menjalankannpm install
untuk masing-masing, dan juga tidak ingin mereka memberikannode_modules
direktori).requireg
sejak awal, inilah intinya.Untuk utilitas CLI yang bergantung pada modul besar, seperti
puppeteer
, saya suka menelurkannpm root -g
dan menggunakannya untuk memerlukan modul global.sumber
Anda dapat meletakkan baris ini di
.profile
file Anda :Ini akan
node
menggunakan jalur global.sumber
node_modules
. Ini adalah jawaban lama tapi saya ingat saya mendapatkannya dari suatu tempat di dokumentasi. Bagaimanapun, di komputer saya (pada tahun 2020)node_modules
direktori global npm adalahusr/lib/node_modules
. Ngomong-ngomong, saya percayanpm config get prefix
karena ini digunakan secara global oleh npm setiap kali paket global diinstal jadi seharusnya benar.package.json
file atau diyarn.lock
/package-lock.json
.node_modules
folder, lalu itu adalah induknya, kemudian itu adalah induknya, ... sampai ia menemukannode_modules
folder yang berisi modul itu. Namun, jika Anda menginstal paket secara global, itu tidak akan berada di dalamnode_modules
folder di atas direktori skrip saat ini sehingga Anda menggunakan NODE_PATH sebagai cadangan di mana node akan mencari paket.