npm global prefix path

142

Saya menjadi lebih berhati-hati daripada biasanya karena saya bingung dengan perilaku npmdi masa lalu.

Saya menggunakan Mac dan telah menginstal node.js melalui brew install node.

Sekarang saya ingin menjalankan jslint.jspada command-line sebagai perintah jslintsaya menemukan bahwa cara kanonik untuk mencapai ini adalah sudo npm install -g jslintyang dijalankan dengan sukses dengan output ini:

$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)

Kemudian

$ jslint ply.js
zsh: command not found: jslint

karena /usr/local/share/npm/bintidak ada di saya $PATH.

1) Mengapa brewtidak menginstal global npm binpath to path? Mungkin memang begitu, tetapi sesuatu zshmemang mengacaukannya. Di mana saya bisa menemukan itu?
2) Haruskah saya melakukan ini? (Tambahkan :/usr/local/share/npm/binke yang diekspor $PATHdi bagian bawah saya ~/.zshrc)

Sepertinya ini bukan cara yang tepat untuk melakukannya karena jika saya menginstal sesuatu yang lain nanti (menggunakan Homebrew atau sesuatu) saya akan perlu menambahkannya ke skrip startup zsh saya untuk mengatur path. Saya kira dalam contoh khusus ini hanya masalah npm install -gtidak membuat symlink yang tepat di lokasi yang "tepat" (seperti /usr/local/binmungkin).

Saya pikir apa yang akan saya lakukan adalah membangun symlink secara manual /usr/local/binuntuk setiap program yang bermasalah dengan saya dan itu harus cukup baik untuk tujuan saya.

EDIT : Saya memperbarui ini pada 2019, karena pertanyaan lama ini populer tetapi sekarang sudah usang baik dalam hal alur kerja pribadi saya dan juga dalam hal cara terbaik menginstal node dan mengelola berbagai dependensinya.

Alur kerja pribadi saya sekarang adalah menggunakan installer yang diperoleh dari nodejs.org untuk menginstal node pada sistem. Saya benar-benar percaya ini lebih dari paket homebrew itu sendiri, karena ia tahu yang terbaik bagaimana mengelola file. Jika Anda ingin mengubah simpul sistem Anda dari 8.10 menjadi 10.15, baik di Mac atau Windows, cukup unduh penginstal dari nodejs.org untuk 10.15 untuk OS Anda. Mencoba untuk memutakhirkan simpul yang diinstal melalui homebrew selalu terbukti menjadi pendekatan yang lebih sulit dalam pengalaman saya.

Juga, hal terbesar untuk ditunjukkan adalah bahwa penggunaan sudo seperti yang ditunjukkan pada instalasi ns saya dari jslint contoh di atas sangat tidak disarankan; Saya cukup yakin bahwa paket-paket homebrew tidak boleh diinstal atau berinteraksi dengan cara apa pun menggunakan superuser. Seharusnya tidak perlu, dan akan menyebabkan sakit kepala izin izin!

Selanjutnya saya merekomendasikan ESLint lebih dari jslint, dan belum pernah menggunakan jslint selama bertahun-tahun.

Steven Lu
sumber
Terima kasih, mereka sudah diperbaiki sekarang. Saya biasanya tidak begitu ceroboh tetapi saya mengetik pertanyaan ini dengan sangat cepat
Steven Lu
@ DaveNewton saya biasanya melakukan itu, ya. Pertanyaan ini benar-benar ceroboh tetapi itu salah satu yang paling populer.
Steven Lu
bukankah lebih mudah untuk menyalin teks daripada tangkapan layar? tetap diperbaiki.
1
@ saleemrashid1 ​​Hei, aku bermaksud melakukan ini. Apakah Anda benar-benar membacanya dan menyalinnya? Terima kasih.
Steven Lu
3
Ya! Sama-sama. Saya sedang mengerjakan permainan dan ketika saya sedang menunggu NPM untuk mengunduh hal-hal yang saya lakukan!

Jawaban:

308

Memperpanjang Anda PATHdengan:

export PATH=/usr/local/share/npm/bin:$PATH

bukan ide yang buruk. Karena itu, Anda tidak harus melakukannya.

Jalankan ini:

npm config get prefix

Default pada OS X adalah /usr/local, yang berarti bahwa npm akan menyinkronkan binari /usr/local/bin, yang seharusnya sudah ada pada Anda PATH(terutama jika Anda menggunakan Homebrew).

Begitu:

  1. npm config set prefix /usr/local jika itu sesuatu yang lain, dan
  2. Jangan gunakan sudodengan npm! Menurut dokumen jslint , Anda seharusnya bisa melakukannya npm install.

Jika Anda menginstal npm sebagai sudo ( sudo brew install), coba instal ulang dengan polos ol ' brew install. Homebrew seharusnya membantu Anda tetap sudobebas.

Trevor Burnham
sumber
1
Terima kasih! npmmenolak untuk menginstal jslintsecara global. npm install -g jslintgagal Error: EACCES, open '/Users/user/.npm/564fcf84-jslint.lock'
Steven Lu
2
Tidakkah saya perlu chown /usr/localjika saya memiliki skrip untuk menulis tautan ke dalamnya tanpa memerlukan sudo? Bagaimana dengan mengikuti ini untuk mengatur nom / node ~/.localatau sesuatu?
Steven Lu
2
MANIS! Aku pergi dan membuka berbagai dirs disimpan oleh pengguna rootdi saya ~/dir (oleh sudo rm -rpada tmp/dan .npm/) dan kemudian sebuah npm install -g jslintbekerja dengan indah. Sangat rapi bahwa npm itu sendiri adalah program simpul dan sedikit bukti konsep JS baris untuk saya yang mulai saya hargai sekarang karena saya memahaminya sedikit lebih baik.
Steven Lu
2
@StevenLu Yap, chown-ing /usr/localdan semua yang ada di dalamnya adalah praktik standar pada OS X. Lihat halaman pemecahan masalah pada wiki Homebrew.
Trevor Burnham
Yap sepertinya chowning dari /usr/localtelah terjadi pada mesin saya dinyatakan npmet al berjalan tanpa sudotidak akan mampu untuk deposit link ke /usr/local/bin/dll
Steven Lu
8

Menghabiskan waktu untuk masalah ini, dan tombol PATH tidak membantu. Masalah saya adalah bug Homebrew / node / npm yang ditemukan di sini - https://github.com/npm/npm/issues/3794

Jika Anda sudah menginstal simpul menggunakan Homebrew, coba **** Perhatikan per komentar bahwa ini mungkin tidak aman. Itu bekerja untuk saya tetapi bisa memiliki konsekuensi yang tidak diinginkan. Tampaknya juga versi terbaru Homebrew menginstal npm dengan benar. Jadi kemungkinan besar saya akan mencobabrew update , brew doctor, brew upgrade nodedll sebelum mencoba ****:

npm update -gf

Atau, jika Anda ingin menginstal node dengan Homebrew dan mengaktifkan npm, gunakan:

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh
YPCrumble
sumber
3
Dengan santai merekomendasikan bahwa orang secara global memaksa pembaruan bukanlah ide yang baik.
toxaq
1
Mengikuti saran dari seseorang di internet secara membabi buta bukanlah ide yang bagus.
Volte
Metode gaya pada -gf membuatnya untuk saya. Terima kasih.
MEM
5

Saya menggunakan minuman dan awalan sudah diatur menjadi:

$ npm config get prefix
/Users/[user]/.node

Saya memang memperhatikan bahwa folder bin dan lib dimiliki oleh root, yang mencegah instalasi non sudo yang biasa, jadi saya memilikinya kembali kepada pengguna

$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin

Lalu saya baru saja menambahkan path ke .bash_profile saya yang terletak di / Users / [user]

PATH=$PATH:~/.node/bin
Greg
sumber
3

brew seharusnya tidak mengharuskan Anda menggunakan sudo bahkan ketika menjalankan npm dengan -g. Ini sebenarnya dapat menciptakan lebih banyak masalah di jalan.

Biasanya, pembuatan bir atau port memungkinkan Anda memperbarui jalur Anda sehingga tidak berisiko mengacaukan .zshrc, .bashrc, .cshrc, atau citarasa cangkang apa pun yang Anda gunakan.

Pascal Belloncle
sumber
Memang minuman tidak memerlukan dan merekomendasikan terhadap penggunaan sudo. Saya menggunakan sudo pada npm(karena sesuatu yang saya baca menyuruh saya). Saya ingin tahu di mana harus mencari cara mengatur jalur. Sebenarnya sepertinya zshinstaller menjalankan sesuatu yang berakhir dengan hardcoding jalan (pada saat instalasi zsh) ke .zshrcmana saya tidak begitu suka
Steven Lu
Apa pun yang diinstal oleh npm harus diinstal dalam /usr/local. The /usrpath namespace dicadangkan untuk paket resmi distro Anda. /usr/local/bindi $ PATH Anda atau tidak, adalah masalah zsh.
Floby
skrip minuman tidak menambahkan apa pun ke skrip startup Anda, ini adalah sesuatu yang perlu Anda lakukan. lihat madebyhoundstooth.com/blog/install-node-with-homebrew-on-os-x untuk contoh.
Pascal Belloncle
2

Saya berhasil memperbaiki kesalahan perintah Vue Cli dengan melakukan hal berikut:

  • Di terminal sudo nano ~/.bash_profile untuk mengedit profil bash Anda.
  • Menambahkan export PATH=$PATH:/Users/[your username]/.npm-packages/bin
  • Simpan file dan mulai ulang terminal
  • Sekarang Anda harus dapat menggunakan vue create my-projectdan vue --versionlain - lain.

Saya melakukan ini setelah saya menginstal Vue Cli terbaru dari https://cli.vuejs.org/

Saya biasanya menggunakan benang, tetapi saya menginstal ini secara global dengan npm npm install -g @vue/cli . Anda juga bisa menggunakan benang jika mauyarn global add @vue/cli

Catatan: Anda mungkin harus menghapus instalannya terlebih dahulu secara global jika Anda telah menginstalnya: npm uninstall -g vue-cli

Semoga ini membantu!

Mark Fasel
sumber
1
Ini pada dasarnya bekerja untuk saya. Saya harus menyesuaikannya untuk mengekspor PATH = $ PATH: / Users / [nama pengguna Anda] /node_modules/.bin
Mike Carpenter
0

Coba jalankan:

PATH=$PATH:~/npm/bin

dan kemudian lakukan tes dengan menjalankan expressdi baris perintah. Ini berhasil untuk saya.

kiko carisse
sumber
cukup yakin maksud Anda ~/.npm/binatau semacamnya. seharusnya tidak ada npmdir yang ditambahkan ke dir rumah Anda.
Steven Lu
0

Jika Anda telah menautkan paket simpul menggunakan perintah sudo

Lalu pergi ke folder tempat node_modules diinstal secara global.

Pada sistem Unix mereka biasanya ditempatkan di / usr / local / lib / node atau / usr / local / lib / node_modules ketika diinstal secara global. Jika Anda mengatur variabel lingkungan NODE_PATH ke jalur ini, modul dapat ditemukan oleh node.

Windows XP -% USERPROFILE% \ Data Aplikasi \ npm \ node_modules Windows 7 -% AppData% \ npm \ node_modules

dan kemudian jalankan perintah

ls -l

Ini akan memberikan daftar semua node_modules global dan Anda dapat dengan mudah melihat modul simpul yang ditautkan.

selftaught91
sumber
0

sudo brew tidak lagi menjadi pilihan jadi jika Anda menginstal dengan brew pada saat ini Anda akan mendapatkan 2 hal yang benar-benar menjengkelkan: A: suka menginstal ke dalam /usr/local/optsatau sesuai dengan ini, / usr / local / shared. Ini bukan masalah besar pada awalnya tetapi saya punya masalah dengan PATH simpul terutama ketika saya menginstal serat. B: Anda agak terjebak dengan perintah sudo sampai Anda menghapus dan menginstalnya dengan cara ini atau Anda bisa mendapatkan tumpukan dari Bitnami

Saya merekomendasikan metode ini di atas opsi tumpukan karena siap digunakan jika Anda memiliki banyak proyek. Jika Anda menggunakan stack MEAN premade, Anda harus mengatur host virtual di httpd.conf (lebih merepotkan dari stack ini daripada XAMPP). Lakukan pembaruan seperti biasa pada extra / vhosts.conf Anda dan / etc / hosts untuk setiap tambahan proyek, kecuali jika Anda ingin repoint dan me-restart server Anda ketika Anda selesai memperbarui hal-hal.

malaikat
sumber
0

Solusi sederhana adalah ...

Masukkan saja perintah di bawah ini:

  1. sudo npm config get prefix

    jika bukan sesuatu seperti ini /usr/local, maka Anda perlu memperbaikinya menggunakan perintah di bawah ini.

  2. sudo npm config set prefix /usr/local...

Sekarang 100% berfungsi dengan baik

Yogesh Kumar
sumber
Sangat merekomendasikan menghindari sudo dengan npm. Lihat hasil edit saya.
Steven Lu