Bagaimana cara menginstal NPM di belakang proksi otentikasi pada Windows?

30

Saya perlu menjalankan Node dan NPM versi terbaru pada Windows. Saya menginstal Node 0.5.8 dan mengunduh sumber NPM dari GitHub. Langkah-langkah yang saya ikuti untuk menginstal NPM terdaftar di situs GitHub-nya tetapi saya memiliki masalah menjalankan perintah berikut:

node cli.js install npm -gf

tetapi gagal dengan pesan kesalahan berikut:

Error: connect UNKNOWN
at errnoException (net_uv.js:566:11)
at Object.afterConnect [as oncomplete] (net_uv.js:557:18)

System Windows_NT 5.1.2600
command "...\\Node\\bin\\node.exe" "...\\npm\\cli.js" "install" "npm" "-gf"
cwd ...\npm
node -v v0.5.8
npm -v 1.0.94
code UNKNOWN

Saya pikir ini adalah masalah karena saya perlu otentikasi di proxy saya untuk terhubung ke Internet. Tetapi saya tidak menemukan cara untuk memberitahu installer untuk menggunakan kredensial saya untuk login. Apakah ada kemungkinan untuk memberikan IP proxy saya dan informasi masuk ke instalasi npm mungkin melalui argumen baris perintah?

Saya dapat memberikan log lengkap (tetapi tampaknya tidak memiliki informasi yang lebih relevan) menggunakan pastebin jika diperlukan.

Tobias
sumber
6
Trik kecil, jika nama pengguna berisi notasi domain \ pengguna gantikan backslash dengan kode pelarian http (% 5C)
@layos Terima kasih banyak. Jika ini reddit, aku akan memberimu emas.
Korinna

Jawaban:

39

set http_proxybekerja sangat baik untuk saya, tetapi saya harus memasukkannya setiap kali saya membuka command prompt. Jadi saya harus menggabungkan beberapa jawaban dan sekarang jawaban saya permanen.

Urutan saya adalah sebagai berikut:

  • Pergi ke C:\Users\YourUserName
  • Buat file dengan nama .npmrc
  • Di dalam file itu ketikkan yang berikut (jika Anda menggunakan domain AD):

proxy = http://domain\\username:password@ip:port

  • Atau gunakan ini Anda TIDAK berada di domain AD:

proxy = http://username:password@ip:port

  • Simpan File
  • Buka prompt perintah dan coba gunakan npm

Yang lain memiliki kesuksesan ekstra dengan perintah tambahan berikut:

strict-ssl = false

* Anda harus dapat menggunakan alamat IP atau URL ke proxy sebagai pengganti "IP" di atas.

String proxy Anda mungkin perlu diubah sedikit, tetapi ini membuatnya agar saya tidak perlu menambahkan ini setiap saat.

Tepuk tangan

Eric Steinborn
sumber
3
Tunggu sebentar, jika kata sandi Anda mengandung "@" npm tidak akan melewatkan pengaturan proxy Anda dengan benar. Solusi yang potensial adalah dengan meletakkan nama pengguna palsu: kata sandi di konfigurasi npm, dan menggunakan proxy lokal (seperti fiddler) untuk memodifikasi header Proxy-Authorization permintaan untuk memiliki nama pengguna yang benar: kata sandi. Ingatlah nama pengguna: kata sandi yang disimpan dalam Proksi-Otorisasi adalah base64 yang disandikan.
BStruthers
9
Punya milik saya untuk bekerja dengan:proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false
Luke
1
tidak membuat saya bekerja dengan nama pengguna: kata sandi
philx_x
1
Hei, saya sudah mencoba menggunakan domain\\user:password@urltoproxy:port, ketika saya menjalankan npm installopsi berubah menjadi domain/user:password@urltoproxy:portJadi bagaimana saya mengatasi ini?
Jacob Schneider
Saya mengalami masalah yang sama dengan @JacobSchneider, pada .npmrc saya: -ssl=false registry=http://registry.npmjs.org/ proxy=http://domain\\username:password#@proxy.url:8080 lalu ketika saya mendapatkan pengaturan dari konfigurasi dengan npm config get proxy: http://domain/username:password#@proxy.url:8080 perhatikan bahwa backslash yang lolos '\\' berubah menjadi garis miring '/'
pompalini
10

Mungkin pengaturan variabel lingkungan akan bekerja untuk Anda:

set HTTP_PROXY=http://user:[email protected]:port

(Dalam kasus saya, ini menyelesaikan "connect UNKNOWN", tapi saya mendapatkan kesalahan "socket hang up" yang sama sekali berbeda. Saya juga mencoba mengatur variabel lingkungan HTTPS_PROXY, tetapi mendapatkan hasil yang sama.)

nafisto
sumber
Saya mencoba mengatur variabel lingkungan dan juga mencoba meneruskan --proxy pengguna: [email protected]: port ke perintah tetapi sekarang saya selalu mendapatkan ECONNREFUSED .. Apakah saya perlu menentukan domain AD saya untuk login proxy?
Tobias
@Tobias tryset HTTP_PROXY=http://domain\user:[email protected]:port
Adam Grant
8

Saya memiliki masalah yang identik ini dan inilah yang saya lakukan untuk membuatnya bekerja:

  • Pergi ke: C:\Users\YourUserName
  • Buat file dengan nama .npmrc
  • Dan isinya akan berbunyi:

    registry = http://registry.npmjs.org
    
  • Coba perintah node cli.js install npm -gflagi.

sam
sumber
Saya membuat file dengan konten yang Anda sebutkan tetapi masih mendapatkan koneksi UNKNOWN error :(
Tobias
Sorakan untuk ini. Melakukan "npm config set registry registry.npmjs.org " untuk berkeliling https: // dan semuanya baik-baik saja pada pengaturan windows saya.
Gavin Gilmour
1
jika seseorang mendapatkan pesan ETIMEOUT tambahkan pengaturan proxy dengannode config set proxy http://username:password@server:port
Jeremy S.
Apa yang berhasil bagi saya adalah membuat ~/.npmrcfile seperti di atas, yang memberi tahu npm untuk menggunakan http://registri alih-alih https://, dan kemudian mengatur http_proxyvariabel lingkungan saya kehttp://myusername:[email protected]:1234
Maxy-B
Tunggu sebentar, jika kata sandi Anda mengandung "@" npm tidak akan melewatkan pengaturan proxy Anda dengan benar. Solusi yang potensial adalah dengan meletakkan nama pengguna palsu: kata sandi di konfigurasi npm, dan menggunakan proxy lokal (seperti fiddler) untuk memodifikasi header Proxy-Authorization permintaan untuk memiliki nama pengguna yang benar: kata sandi. Ingatlah nama pengguna: kata sandi yang disimpan dalam Proksi-Otorisasi adalah base64 yang disandikan.
BStruthers
4

Setelah beberapa penelitian, saya bisa menggunakannya dengan cara ini:

  1. Instal NTLM Authorization Proxy Server atau server proxy lain untuk NTLM, seperti Cntlm. Secara pribadi, saya lebih suka server python, karena saya bisa bermain-main dengannya, dan kinerja tidak menjadi masalah.

  2. Siapkan konfigurasi; perhatikan bahwa dalam kasus saya, saya harus mengaktifkan mode LM dan NT, dan saya menduga itu adalah kasus yang normal, saat ini.

  3. Setel variabel lingkungan http_proxy dan https_proxy untuk menunjuk ke proxy lokal Anda:

    set http_proxy = "localhost: 5865"
    set https_proxy = "localhost: 5865"

  4. npm harus bekerja sekarang, tentu saja harus dijalankan dari shell di mana variabel lingkungan di atas didefinisikan.

rampok
sumber
3

Berikut ini bekerja untuk saya.

Di Windows 7:

npm config set proxy xxhttp://username:password@proxyhost:port# 

Ini harus membuat file bernama .npmrcdi C:/users/<username>folder.

Chummar
sumber
3

Ketikkan ini di baris perintah:

npm set proxy http://user:pass@ip:port

npm set https-proxy http://user:pass@ip:port

JANGAN LUPA TERMASUK HTTP: // sebelum nama pengguna Anda. Itu berhasil untuk saya.

Super Luvdub
sumber
2

Masalah ini teratasi bagi saya setelah membuat file .npmrc seperti di atas, dan kemudian menjalankan perintah adduser dan mengikuti perintah cmd.

npm adduser

Jalankan comman berikut untuk melihat apakah Anda memiliki nama pengguna resmi:

npm whoami
John
sumber
2

Masing-masing jawaban di atas memerlukan pengguna untuk menulis kata sandi dalam file teks, atau dalam variabel lingkungan.

Secara pribadi saya tidak suka solusi seperti ini, untuk pendekatan tidak aman mereka. Jadi saya mencoba untuk menulis aplikasi yang menyuntikkan token Kerberos dari pengguna saat ini dalam pertukaran antara klien (npm, bower, git) dan proxy. Yang mengatakan, Active Directory hanyalah implementasi proprietary dari Kerberos.

Saya menggunakan perangkat lunak ini setiap hari, pada host Windows 8.1. Anda dapat menemukan kode (golang) dan rilis binari pertama di https://github.com/nilleb/authentication-proxy .

nilleb
sumber
1

Ketiga hal tersebut bekerja untuk saya di .npmrc

proxy = http://unam:pwd@host:port
https-proxy = http://unam:pwd@host:port
registry = http://registry.npmjs.org
catrapture
sumber
1

Setidaknya di Windows, ini berfungsi untuk saya dengan pengaturan berikut:

proxy = http: // domain % 5C nama pengguna : kata sandi @ proxy_ip : port

yaitu, (1) menggunakan %5Calih-alih \(seperti yang disarankan di tempat lain) dan (2) menggunakan alamat IP alih-alih nama mesin lokal untuk server proxy.

Ganesh
sumber
Ini benar - domain + nama pengguna dan kata sandi harus URL disandikan secara terpisah. Misalnya jika Anda memiliki # dalam kata sandi Anda, ganti dengan% 23
saille
1

Anda akan mendapatkan host proxy dan port dari administrator atau dukungan server Anda.

Setelah itu diatur

npm config set http_proxy http://username:[email protected]:itsport
npm config set proxy http://username:[email protected]:itsport

Jika ada karakter khusus dalam kata sandi, coba dengan% urlencode. Misalnya: - pound (hash) harus diganti oleh% 23.

Shamseer
sumber
2
Versi mana yang jawaban Anda berlaku untuk memberikan bahwa pertanyaan diajukan lebih dari 3 tahun yang lalu?
Jason Aller
Saya percaya itu tidak masalah. Saya menemukan solusi untuk masalah ini setelah mencoba banyak dan tidak pernah tahu bahwa kata sandi saya membuat masalah. Untuk membuatnya sempurna, pertanyaan apa pun ditanyakan bahkan sebelum sepuluh tahun
:)
0

Solusi yang bekerja untuk saya adalah sebagai berikut:

npm config atur http_proxy http: // nama pengguna : kata sandi @ host / IP : port

npm config set proxy http: // nama pengguna : kata sandi @ host / IP : port

ganti parameter dengan nilai, dalam kasus saya

nama pengguna : (kosong)

kata sandi : (kosong)

host / IP : 192.36.36.110

port : 8080

begitu juga perintah-Ku

npm config atur http_proxy http: //: @ 192.36.36.110: 8080

npm config set proxy http: //: @ 192.36.36.110: 8080

srujan maddula
sumber
0

CNTLM tidak bekerja untuk saya. Saya mencoba semua kemungkinan kombinasi. NPM memberikan kesalahan Otentikasi. Fiddler datang untuk menyelamatkan dan menghemat waktu saya. Mudah untuk menginstal dan mengkonfigurasi. Setel Aturan Fiddler ke Diotentikasi Secara Otomatis. Dalam .npmrc atur ini

registry=http://registry.npmjs.org
proxy=http://127.0.0.1:8888
https-proxy=http://127.0.0.1:8888
http-proxy=http://127.0.0.1:8888
strict-ssl=false

Ini bekerja untuk saya :)

pengguna588459
sumber
0

Apa yang berhasil bagi saya adalah sebagai berikut:

registry=http://registry.npmjs.org
proxy=http://<url.pac>
https-proxy=http://<url.pac>
http-proxy=http://<url.pac>
strict-ssl=false

Saya tidak harus memasukkan nama pengguna atau kata sandi, cukup url file PAC.

Kunal Nanda
sumber