Làm cách nào để cài đặt NPM phía sau proxy xác thực trên Windows?


30

Tôi cần chạy phiên bản mới nhất của Node và NPM trên Windows. Tôi đã cài đặt Node 0.5.8 và tải xuống các nguồn NPM từ GitHub. Các bước tôi đã làm để cài đặt NPM đã được liệt kê trên trang GitHub của nó nhưng tôi gặp vấn đề khi chạy lệnh sau:

node cli.js install npm -gf

nhưng nó không thành công với thông báo lỗi sau:

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

Tôi nghĩ rằng đây là một vấn đề vì tôi cần xác thực tại proxy của mình để kết nối với Internet. Nhưng tôi thấy không có cách nào để nói với trình cài đặt sử dụng thông tin đăng nhập của tôi để đăng nhập. Có khả năng cung cấp IP proxy và thông tin đăng nhập của tôi để cài đặt npm có thể thông qua các đối số dòng lệnh không?

Tôi có thể cung cấp nhật ký đầy đủ (nhưng dường như không có thêm thông tin liên quan) bằng cách sử dụng pastebin nếu cần.


6
Một mẹo nhỏ, nếu tên người dùng chứa tên miền \ ký hiệu người dùng thay thế dấu gạch chéo ngược bằng mã thoát http (% 5C)

@layos Cảm ơn bạn rất nhiều. Nếu đây là reddit, tôi sẽ cho bạn vàng.
Korinna

Câu trả lời:


39

set http_proxylàm việc rất tốt cho tôi nhưng tôi phải nhập nó mỗi lần tôi mở dấu nhắc lệnh. Vì vậy, tôi đã phải kết hợp nhiều câu trả lời và bây giờ của tôi là vĩnh viễn.

Trình tự của tôi đã đi như sau:

  • Đi đến C:\Users\YourUserName
  • Tạo một tập tin có tên .npmrc
  • Bên trong tệp đó, nhập vào phần sau (nếu bạn đang ở trên miền AD):

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

  • Hoặc sử dụng cái này là bạn KHÔNG ở trên miền AD:

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

  • Lưu các tập tin
  • Mở một dấu nhắc lệnh và thử sử dụng npm

Những người khác đã có thêm thành công với lệnh bổ sung sau:

strict-ssl = false

* Bạn có thể sử dụng địa chỉ IP hoặc URL tới proxy thay cho "IP" ở trên.

Chuỗi proxy của bạn có thể cần phải được điều chỉnh một chút, nhưng điều này làm cho nó để tôi không phải thêm chuỗi này mỗi lần.

Chúc mừng


3
Hãy đứng lên, nếu mật khẩu của bạn chứa "@" npm sẽ không phân tích chính xác cài đặt proxy của bạn. Một cách giải quyết tiềm năng là đặt tên người dùng không có thật: mật khẩu trong cấu hình npm và sử dụng proxy cục bộ (như fiddler) để sửa đổi tiêu đề Ủy quyền ủy quyền của yêu cầu để có tên người dùng chính xác: mật khẩu. Hãy ghi nhớ tên người dùng: mật khẩu được lưu trữ trong Proxy-Authorization được mã hóa base64.
BStruthers

9
Có của tôi để làm việc với:proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false
Luke

1
không nhận được của tôi để làm việc với tên người dùng: mật khẩu
philx_x

1
domain\\user:password@urltoproxy:portTuy nhiên , tôi đã thử sử dụng , tuy nhiên, khi tôi chạy npm installtùy chọn thay đổi thành domain/user:password@urltoproxy:portVậy làm cách nào để khắc phục điều này?
Jacob Schneider

Tôi đang gặp vấn đề tương tự như @JacobSchneider, trên .npmrc tôi: -ssl=false registry=http://registry.npmjs.org/ proxy=http://domain\\username:password#@proxy.url:8080 sau đó khi tôi nhận được thiết lập từ cấu hình với npm config get proxy: http://domain/username:password#@proxy.url:8080 lưu ý rằng dấu chéo ngược thoát '\\' thay đổi cho một dấu gạch chéo '/'
pompalini

10

Có thể thiết lập một biến môi trường sẽ làm việc cho bạn:

set HTTP_PROXY=http://user:pass@server.url:port

(Trong trường hợp của tôi, điều này giải quyết "kết nối UNKNOWN", nhưng tôi gặp lỗi "treo ổ cắm" hoàn toàn khác. Tôi cũng đã thử đặt biến môi trường HTTPS_PROXY, nhưng nhận được kết quả tương tự.)


Tôi đã thử thiết lập biến môi trường và cũng đã thử chuyển người dùng --proxy : pass@server.url: port vào lệnh nhưng bây giờ tôi vẫn nhận được ECONNREFUSED .. Tôi có cần chỉ định miền AD của mình để đăng nhập proxy không?
Tobias

@Tobias thửset HTTP_PROXY=http://domain\user:pass@server.url:port
Adam Grant

8

Tôi đã có vấn đề giống hệt nhau và đây là những gì tôi đã làm để thực hiện công việc này:

  • Đi đến: C:\Users\YourUserName
  • Tạo một tập tin có tên .npmrc
  • Và mục nhập của nó sẽ đọc:

    registry = http://registry.npmjs.org
    
  • Hãy thử lại lệnh node cli.js install npm -gf.


Tôi đã tạo tệp có nội dung bạn đã đề cập nhưng vẫn gặp lỗi kết nối UNKNOWN :(
Tobias

Chúc mừng cho điều này. Có phải "npm config set registry registry.npmjs.org " để truy cập https: // và tất cả đều tốt trong thiết lập windows của tôi.
Gavin Gilmour

1
nếu ai đó nhận được thông báo ETIME hiện thêm cài đặt proxy vớinode config set proxy http://username:password@server:port
Jeremy S.

Điều làm việc cho tôi là tạo ~/.npmrctệp như trên, cho biết npm sử dụng http://sổ đăng ký thay vì https://, sau đó đặt http_proxybiến môi trường của tôi thànhhttp://myusername:mypassword@proxy.company.com:1234
Maxy-B

Hãy đứng lên, nếu mật khẩu của bạn chứa "@" npm sẽ không phân tích chính xác cài đặt proxy của bạn. Một cách giải quyết tiềm năng là đặt tên người dùng không có thật: mật khẩu trong cấu hình npm và sử dụng proxy cục bộ (như fiddler) để sửa đổi tiêu đề Ủy quyền ủy quyền của yêu cầu để có tên người dùng chính xác: mật khẩu. Hãy ghi nhớ tên người dùng: mật khẩu được lưu trữ trong Proxy-Authorization được mã hóa base64.
BStruthers

4

Sau một số nghiên cứu, tôi có thể sử dụng nó theo cách này:

  1. Cài đặt Máy chủ ủy quyền NTLM hoặc máy chủ proxy khác cho NTLM, như Cntlm. Cá nhân, tôi thích máy chủ python hơn, vì tôi có thể sửa đổi nó và hiệu suất không phải là vấn đề.

  2. Thiết lập cấu hình; lưu ý rằng trong trường hợp của tôi, tôi phải kích hoạt cả chế độ LM và NT, và tôi sẽ nghi ngờ đây là trường hợp bình thường.

  3. Đặt biến môi trường http_proxy và https_proxy để trỏ đến proxy cục bộ của bạn:

    đặt http_proxy = "localhost: 5865"
    đặt https_proxy = "localhost: 5865"

  4. npm nên hoạt động ngay bây giờ, tất nhiên nó nên được thực thi từ shell nơi các biến môi trường trên được xác định.


3

Sau đây làm việc cho tôi.

Trên Windows 7:

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

Điều này sẽ tạo ra một tập tin có tên .npmrctrong C:/users/<username>thư mục.


3

Nhập cái này vào dòng lệnh:

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

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

KHÔNG GIỚI THIỆU ĐỂ BAO GỒM HTTP: // trước tên người dùng của bạn. Nó làm việc cho tôi.


2

Vấn đề này đã được giải quyết cho tôi sau khi tạo tệp .npmrc như trên, sau đó chạy lệnh adduser và làm theo lời nhắc cmd.

npm adduser

Chạy comman sau để xem bạn có tên người dùng được ủy quyền không:

npm whoami

2

Mỗi một trong những câu trả lời trên cần người dùng ghi mật khẩu của mình vào một tệp văn bản hoặc trong một biến môi trường.

Cá nhân tôi không thích một giải pháp như thế này, vì cách tiếp cận không an toàn của họ. Vì vậy, tôi đã cố gắng viết một ứng dụng tiêm mã thông báo Kerberos của người dùng hiện tại vào các trao đổi giữa máy khách (npm, bower, git) và proxy. Điều đó nói rằng, Active Directory chỉ là một triển khai độc quyền của Kerberos.

Tôi sử dụng phần mềm này hàng ngày, trên máy chủ Windows 8.1. Bạn có thể tìm thấy mã (golang) và các nhị phân phát hành đầu tiên trên https://github.com/nilleb/authentication-proxy .


1

Tất cả ba điều làm việc cho tôi trong .npmrc

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

1

Ít nhất là trong Windows, nó hoạt động với tôi với cài đặt sau:

proxy = http: // tên miền % 5C tên người dùng : password @ proxy_ip : port

tức là, (1) sử dụng %5Cthay vì \(như được đề xuất ở nơi khác) và (2) sử dụng địa chỉ IP thay vì tên máy cục bộ cho máy chủ proxy.


Điều này là chính xác - tên miền + tên người dùng và mật khẩu cần được mã hóa URL riêng. Ví dụ: nếu bạn có # trong mật khẩu của mình, hãy thay thế bằng% 23
saille 14/08/2015

1

Bạn sẽ nhận được máy chủ proxy và cổng từ quản trị viên hoặc hỗ trợ máy chủ của bạn.

Sau đó thiết lập

npm config set http_proxy http://username:password@proxyofmycomp.com:itsport
npm config set proxy http://username:password@proxyofmycomp.com:itsport

Nếu có bất kỳ ký tự đặc biệt nào trong mật khẩu, hãy thử với% urlencode. Ví dụ: - pound (băm) shuold được thay thế bằng% 23.


2
Phiên bản nào câu trả lời của bạn áp dụng cho câu hỏi đã được hỏi hơn 3 năm trước?
Jason Aller

Tôi tin rằng nó không quan trọng. Tôi đã tìm ra giải pháp cho vấn đề này sau khi đã thử rất nhiều và không bao giờ biết rằng mật khẩu của mình đang gặp vấn đề. Để làm cho nó trở nên hoàn hảo, không có vấn đề gì được hỏi ngay cả trước mười năm :) ...
Shamseer

0

Giải pháp làm việc cho tôi là như sau:

cấu hình npm đặt http_proxy http: // tên người dùng : password @ host / IP : port

cấu hình npm đặt proxy http: // tên người dùng : password @ host / IP : port

thay thế các tham số bằng các giá trị, trong trường hợp của tôi

tên người dùng : (trống)

mật khẩu : (trống)

máy chủ / IP : 192.36.36.110

cổng : 8080

vì vậy các lệnh của tôi là

cấu hình npm đặt http_proxy http: //: @ 192.36.36.110: 8080

Cấu hình npm đặt proxy http: //: @ 192.36.36.110: 8080


0

CNTLM đã không làm việc cho tôi. Tôi đã thử tất cả các kết hợp có thể. NPM đã đưa ra lỗi Xác thực. Fiddler đến để giải cứu và tiết kiệm thời gian của tôi. Nó rất dễ dàng để cài đặt và cấu hình. Đặt quy tắc Fiddler thành Tự động xác thực. Trong .npmrc đặt các quy tắc này

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

Nó làm việc cho tôi :)


0

Những gì làm việc cho tôi là như sau:

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

Tôi không phải nhập bất kỳ tên người dùng hoặc mật khẩu nào, chỉ đơn giản là url tệp PAC.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.