Untuk memperluas jawaban @Steve Roberts.
Nama pengguna saya adalah dalam bentuk "domain \ nama pengguna" - termasuk garis miring dalam konfigurasi proksi yang menghasilkan garis miring yang muncul. Jadi memasuki ini:
npm config set proxy "http://domain\username:password@servername:port/"
Saya juga harus URL menyandikan domain\user
string saya , namun, saya memiliki ruang di dalam nama pengguna saya jadi saya menempatkan +
untuk menyandikan pengkodean URL ruang, tapi itu akan dikodekan ganda sebagai %2B
(yang merupakan pengkodean URL untuk tanda plus, namun URL encoding untuk spasi adalah %20
), jadi saya harus melakukan yang berikut:
perintah npm
// option one
// it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
// option two
// it works best for me
// please notice that I actually used a space
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"
pemecahan masalah konfigurasi npm
Saya menggunakan npm config list
untuk mendapatkan nilai-nilai parsing yang telah saya tetapkan di atas, dan itulah bagaimana saya menemukan tentang pengkodean ganda. Aneh.
Pada dasarnya Anda harus mengetahui persyaratan berikut:
- Apakah
DOMAIN
string diperlukan untuk otentikasi
- Apakah Anda perlu menyandikan karakter khusus?
- Spasi dan tanda (@) sangat menantang
Salam.
VARIABEL LINGKUNGAN WINDOWS (CMD Prompt)
Memperbarui
Ternyata bahkan dengan konfigurasi di atas, saya masih memiliki beberapa masalah dengan beberapa paket / skrip yang menggunakan Permintaan - klien HTTP Sederhana secara internal untuk mengunduh barang. Jadi, seperti yang dijelaskan readme di atas, kita bisa menentukan variabel lingkungan untuk mengatur proxy pada baris perintah, dan Request akan menghormati nilai-nilai itu.
Kemudian, setelah (dan saya enggan mengakuinya) beberapa percobaan (lebih seperti hari), mencoba mengatur variabel lingkungan saya akhirnya berhasil dengan pedoman berikut:
rem notice that the value after the = has no quotations
rem - I believe that if quotations are placed after it, they become
rem part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem - if you leave a space before it, you will be declaring a variable
rem name that includes such space, you do not want to do that
rem - if you leave a space after it, you will be including the space
rem as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
SET HTTPS_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
cntlm
Saya menggunakan teknik di atas selama beberapa minggu, sampai saya menyadari overhead memperbarui kata sandi saya di semua alat yang membutuhkan pengaturan proxy.
Selain npm, saya juga menggunakan:
- punjung
- gelandangan
- kotak virtual (menjalankan linux)
- apt-get [linux]
- git
- vscode
- kurung
- atom
- tsd
cntlm Langkah Pengaturan
Jadi, saya menginstal cntlm . Pengaturan cntlm
cukup lurus ke depan, Anda mencari file ini @C:\Program Files\Cntlm\cntlm.ini
- Buka
C:\Program Files\Cntlm\cntlm.ini
(Anda mungkin memerlukan hak admin)
- mencari
Username
danDomain
garis (garis 8-9 saya pikir)
- tambahkan nama pengguna Anda
- tambahkan domain Anda
Pada cmd prompt jalankan:
cd C:\Program Files\Cntlm\
cntlm -M
cntlm -H
- Anda akan dimintai kata sandi:
cygwin warning:
MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
Preferred POSIX equivalent is: /Cntlm/cntlm.ini
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Password:
Output yang Anda dapatkan cntlm -H
akan terlihat seperti:
PassLM 561DF6AF15D5A5ADG
PassNT A1D651A5F15DFA5AD
PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN'
- Disarankan agar Anda menggunakan PassNTLMv2 jadi tambahkan
#
baris sebelum PassLM
dan PassNT
atau jangan menggunakannya
- Tempel output dari
cntlm -H
pada file ini menggantikan baris untuk PassLM
, PassNT
danPassNTMLv2
, atau komentar baris asli dan tambahkan milik Anda.
- Tambahkan
Proxy
server Anda . Jika Anda tidak tahu apa itu server proxy ... Lakukan apa yang saya lakukan, saya mencari file konfigurasi otomatis proxy saya dengan mencari AutoConfigURL
kunci Registry diHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
. Arahkan ke url itu dan lihat kode yang kebetulan adalah JavaScript.
- Secara opsional, Anda dapat mengubah port tempat cntlm mendengarkan dengan mengubah
Listen ####
baris, di mana ####
nomor port.
Atur NPM dengan cntlm
Jadi, Anda arahkan npm ke proxy cntml Anda, Anda dapat menggunakan ip, yang saya gunakan localhost
dan port default untuk cntlm 3128
sehingga url proxy saya terlihat seperti ini
http://localhost:3128
Dengan perintah yang tepat:
npm config set proxy http: // localhost: 3128
Jauh lebih sederhana. Anda mengatur semua alat Anda dengan url yang sama, dan Anda hanya memperbarui kata sandi di satu tempat. Hidup jadi jauh lebih sederhana.
Harus Menyiapkan Sertifikat npm CA
Dari dokumentasi npm ca
Jika proksi perusahaan Anda mencegat koneksi https dengan Sertifikat yang Ditandatangani Sendiri, ini adalah suatu keharusan untuk dihindari npm config set strict-ssl false
(tidak-tidak besar).
Langkah dasar
- Dapatkan sertifikat dari browser Anda (Chromes berfungsi dengan baik). Ekspor sebagai basis-64 yang dikodekan X.509 (.CER)
- Ganti baris baru dengan
\n
- Edit
.npmrc
baris Andaca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Masalah
Saya telah memperhatikan bahwa kadang-kadang npm semacam hang, jadi saya berhenti (kadang-kadang dengan paksa) cntlm dan restart.