Helpex - Trao đổi & giúp đỡ Đăng nhập
126

Tôi cần tải xuống một số gói thông qua npm nhưng cấu hình proxy công ty của chúng tôi là tệp .pac (tôi đang ở trên windows)

Tôi đã thử rồi

npm config set proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac
npm config set https-proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac

hoặc là

npm config set proxy http://1.2.3.4:8181/proxy.pac
npm config set https-proxy http://1.2.3.4:8181/proxy.pac

nhưng nó không hoạt động ...

bất cứ đề nghị nào? cảm ơn

126 hữu ích 4 bình luận 222k xem chia sẻ
23 trả lời 23
169

Tôi vừa gặp một vấn đề rất giống nhau, ở đó tôi không thể có được npm để làm việc đằng sau máy chủ proxy của chúng tôi.

Tên người dùng của tôi có dạng "domain \ username" - bao gồm dấu gạch chéo trong cấu hình proxy dẫn đến dấu gạch chéo phía trước xuất hiện. Vì vậy, nhập vào đây:

npm config set proxy "http://domain\username:password@servername:port/"

sau đó chạy cái này npm config get proxytrả về cái này: http: // domain / username: password @ servername: port /

Do đó, để khắc phục sự cố tôi thay vào đó URL đã mã hóa dấu gạch chéo ngược, vì vậy hãy nhập vào đây:

npm config set proxy "http://domain%5Cusername:password@servername:port/"

và với điều này, quyền truy cập proxy đã được sửa.

169 hữu ích 5 bình luận chia sẻ
53

Tìm url của pactệp trong cài đặt lan explorer internet và tải xuống tệp pac từ URL được định cấu hình. Tệp pac chỉ là một tệp javascript có chức năng được đặt tên FindProxyForURLtrả về các máy chủ proxy khác nhau trong các tình huống khác nhau.

Cố gắng tìm một máy chủ lưu trữ trong tệp pac mà bạn nghĩ là dành cho lưu lượng truy cập web nói chung và cắm nó vào .npmrc trong C:\Users\<username>\.npmrc

proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

Mặc dù bạn có thể đăng nhập bằng tên miền và tên người dùng của mình trên máy công ty, nhưng rất có thể tên miền thư mục hoạt động của người dùng không bắt buộc đối với proxy , chỉ có tên người dùng và mật khẩu (có thể khác với đăng nhập Active Directory của bạn)

Đừng quên sử dụng các ký tự mật khẩu đặc biệt.

53 hữu ích 1 bình luận chia sẻ
42

Tải .pactập tin của bạn . Mở nó trong bất kỳ trình soạn thảo và tìm kiếm PROXY = "PROXY X.X.X.X:80;. Bạn có thể có nhiều proxy, sao chép bất kỳ proxy nào và chạy các lệnh đầu cuối sau:

npm config set proxy http://X.X.X.X:80
npm config set https-proxy http://X.X.X.X:80

Bây giờ bạn sẽ có thể cài đặt bất kỳ gói!

42 hữu ích 5 bình luận chia sẻ
34

Tôi đã giải quyết vấn đề này theo cách này:

1) Tôi chạy lệnh này:

npm config set strict-ssl false

2) Sau đó, đặt npm để chạy với http, thay vì https:

npm config set registry "http://registry.npmjs.org/"

3) Sau đó cài đặt gói của bạn

npm install <package name>

34 hữu ích 2 bình luận chia sẻ
23

Để mở rộng câu trả lời của @Steve Roberts.

Tên người dùng của tôi có dạng "domain \ username" - bao gồm dấu gạch chéo trong cấu hình proxy dẫn đến dấu gạch chéo phía trước xuất hiện. Vì vậy, nhập vào đây:

npm config set proxy "http://domain\username:password@servername:port/"

Tôi cũng phải mã hóa URL domain\userchuỗi của mình , tuy nhiên, tôi có một khoảng trắng trong tên người dùng của mình nên tôi đặt +mã hóa URL không gian, nhưng nó sẽ được mã hóa gấp đôi %2B(đó là mã hóa URL cho dấu cộng, tuy nhiên URL mã hóa cho một không gian là %20), vì vậy tôi phải thay vào đó làm như sau:

lệnh 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"

xử lý sự cố cấu hình npm

Tôi đã sử dụng npm config listđể có được các giá trị được phân tích cú pháp mà tôi đã đặt ở trên và đó là cách tôi tìm ra về mã hóa kép. Kỳ dị.

Trân trọng.

BIẾN ĐỔI MÔI TRƯỜNG WINDOWS (Prompt)

Cập nhật

Hóa ra ngay cả với các cấu hình trên, tôi vẫn gặp một số vấn đề với một số gói / tập lệnh sử dụng Trình khách HTTP - Đơn giản hóa nội bộ để tải xuống nội dung. Vì vậy, như đã đọc ở trên, chúng ta có thể chỉ định các biến môi trường để đặt proxy trên dòng lệnh và Yêu cầu sẽ tôn trọng các giá trị đó.

Sau đó, sau (và tôi miễn cưỡng thừa nhận điều này) một vài lần thử (giống như ngày), khi cố gắng đặt các biến môi trường cuối cùng tôi đã thành công với các nguyên tắc sau:

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

Tôi đã sử dụng kỹ thuật trên trong một vài tuần, cho đến khi tôi nhận ra chi phí cập nhật mật khẩu của mình trên tất cả các công cụ cần thiết lập proxy.

Ngoài npm, tôi cũng sử dụng:

  • bower
  • mơ hồ
    • hộp ảo (chạy linux)
    • apt-get [linux]
  • git
  • vscode
  • dấu ngoặc
  • nguyên tử
  • tsd

Các bước thiết lập cntlm

Vì vậy, tôi đã cài đặt cntlm . Cài đặt cntlmkhá ổn về phía trước, bạn tìm tệp ini @C:\Program Files\Cntlm\cntlm.ini

  1. Mở C:\Program Files\Cntlm\cntlm.ini(bạn có thể cần quyền quản trị)
  2. tìm kiếm UsernameDomaindòng (dòng 8-9 tôi nghĩ)
    • thêm tên người dùng của bạn
    • thêm tên miền của bạn
  3. Trên cmd nhanh chóng chạy:

    cd C:\Program Files\Cntlm\
    cntlm -M
    cntlm -H  
    • bạn sẽ được yêu cầu nhập mật khẩu:
     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:
  4. Đầu ra bạn nhận được cntlm -Hsẽ trông giống như:

    PassLM          561DF6AF15D5A5ADG  
    PassNT          A1D651A5F15DFA5AD  
    PassNTLMv2      A1D65F1A65D1ASD51  # Only for user 'user name', domain 'DOMAIN'
    • Bạn nên sử dụng PassNTLMv2 để thêm #dòng trước PassLMPassNTkhông sử dụng chúng
  5. Dán đầu ra từ cntlm -Hvào file ini thay thế các dây chuyền cho PassLM, PassNTPassNTMLv2, hoặc comment các dòng gốc và thêm bạn.
  6. Thêm Proxymáy chủ của bạn . Nếu bạn không biết máy chủ proxy là gì ... Hãy làm những gì tôi đã làm, tôi đã tìm tệp tự động cấu hình proxy của mình bằng cách tìm AutoConfigURLkhóa Đăng ký HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings. Điều hướng đến url đó và xem qua mã xảy ra là JavaScript.
  7. Tùy chọn bạn có thể thay đổi cổng nơi cntlm lắng nghe bằng cách thay đổi Listen ####dòng, ####số cổng ở đâu.

Cài đặt NPM với cntlm

Vì vậy, bạn trỏ npm đến proxy cntml của bạn, bạn có thể sử dụng ip, tôi đã sử dụng localhostvà cổng mặc định cho cntlm 3128để url proxy của tôi trông như thế này

http://localhost:3128

Với lệnh thích hợp:

Cấu hình npm đặt proxy http: // localhost: 3128

Là đơn giản hơn rất nhiều. Bạn thiết lập tất cả các công cụ của mình với cùng một url và bạn chỉ cập nhật mật khẩu ở một nơi. Cuộc sống đơn giản hơn nhiều không.

Phải thiết lập chứng chỉ CA npm

Từ tài liệu npm ca

Nếu proxy công ty của bạn đang chặn các kết nối https bằng Chứng chỉ tự ký của chính nó, đây là điều cần tránh npm config set strict-ssl false (lớn không-không).

Các bước cơ bản

  1. Nhận chứng chỉ từ trình duyệt của bạn (Chromes hoạt động tốt). Xuất dưới dạng X.509 được mã hóa Base-64 (.CER)
  2. Thay thế dòng mới bằng \n
  3. Chỉnh sửa .npmrcthêm một dòng của bạnca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

Các vấn đề

Tôi đã nhận thấy đôi khi npm loại treo, vì vậy tôi dừng lại (đôi khi mạnh mẽ) cntlm và khởi động lại nó.

23 hữu ích 0 bình luận chia sẻ
6

Tôi đã gặp phải một số vấn đề với điều này và cuối cùng những gì tôi đã làm như sau:

  1. Fiddler đã sử dụng, với "Tự động xác thực" được chọn
  2. Trong quy tắc tùy chỉnh fiddler, tôi đã thêm

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
  3. Cuối cùng, trong npm tôi đã đặt proxy thành http: // localhost: 8888

Điều này làm việc tốt.

6 hữu ích 4 bình luận chia sẻ
4

Bạn có thể kiểm tra Fiddler nếu NPM đang đưa ra lỗi Xác thực. 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 thuộc tính 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 :)

4 hữu ích 1 bình luận chia sẻ
4

Đối với bất kỳ ai gặp khó khăn sau tường lửa doanh nghiệp, cũng như các sự cố với SSL (không thể nhận chứng chỉ nhà phát hành địa phương), đây là một số bước bạn có thể thử:

Quên về SSL

Nếu bạn không quan tâm đến SSL, thì bạn có thể làm theo lời khuyên của nhiều người đóng góp trước đó bằng cách đặt proxy của bạn và thay đổi sổ đăng ký thành phiên bản không bảo mật:

npm config set proxy http://username:password@proxyname:port
npm config set https-proxy http://username:password@proxyname:port
npm config set registry http://registry.npmjs.org/

Một "gotcha" nhanh chóng ở đây, thông tin đăng nhập proxy của tôi giống nhau cho các yêu cầu được bảo mật và không bảo mật (lưu ý cách tôi rời giao thức của mình dưới dạng http: // cho cấu hình proxy https ). Điều này có thể giống với bạn, và nó có thể không.

Tôi muốn giữ SSL

Nếu bạn muốn giữ SSL và không muốn sử dụng strict-ssl=false, thì bạn còn nhiều việc phải làm. Đối với tôi, tôi đứng sau một tường lửa của công ty và chúng tôi đang sử dụng các chứng chỉ tự ký, vì vậy tôi nhận được lỗi unable to get local issuer certificate. Nếu bạn ở cùng thuyền với tôi, thì bạn sẽ cần đặt cafile=tùy chọn trong tệp cấu hình npm. Trước tiên, bạn cần tạo tệp PEM chứa thông tin về chứng chỉ tự ký của bạn. Nếu bạn không biết cách thực hiện, đây là hướng dẫn cho môi trường Windows mà không cần sử dụng phần mềm của bên thứ 3:

Chúng tôi cần chỉ rõ ràng những chứng chỉ nào đáng tin cậy vì chúng tôi đang sử dụng chứng chỉ tự ký. Ví dụ của tôi, tôi đã điều hướng đến www.google.com bằng Chrome để tôi có thể lấy chứng chỉ.

Trong Chrome, đi đến Kiểm tra -> Bảo mật -> Xem Chứng chỉ. Bạn sẽ thấy tất cả các chứng chỉ cho phép kết nối SSL. Lưu ý cách các chứng chỉ này được tự ký. Phần mờ là công ty của tôi và chúng tôi không phải là Cơ quan được chứng nhận. Bạn có thể xuất đường dẫn chứng chỉ đầy đủ dưới dạng tệp P7B hoặc bạn có thể xuất các chứng chỉ riêng lẻ dưới dạng tệp CER (mã hóa base64). Xuất đường dẫn đầy đủ dưới dạng P7B không giúp ích gì nhiều vì bạn sẽ lần lượt cần mở tệp này trong trình quản lý chứng chỉ và xuất dưới dạng tệp CER riêng lẻ. Trong Windows, bấm đúp vào tệp P7B sẽ mở ứng dụng Trình quản lý chứng chỉ.

Sử dụng npm đằng sau proxy công ty .pac?

Xuất dưới dạng CER (Base 64) thực sự là một tệp văn bản theo định dạng sau:

-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF
ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n
b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate...
-----END CERTIFICATE-----

Để tạo tệp PEM của chúng tôi, chúng tôi chỉ cần xếp các chứng chỉ này lên nhau thành một tệp duy nhất và thay đổi phần mở rộng thành .pem. Tôi đã sử dụng notepad để làm điều này.

Bạn xếp các chứng chỉ theo thứ tự ngược lại từ đường dẫn chứng chỉ. Vì vậy, ở trên, tôi sẽ bắt đầu với * .google.com sau đó dán Websense bên dưới nó, sau đó phát hành CA 1, v.v ... Bằng cách này, các chứng chỉ được phân tích cú pháp từ trên xuống dưới để tìm kiếm Root CA thích hợp. Đơn giản chỉ cần bao gồm Root CA sẽ không hoạt động, nhưng chúng tôi cũng không cần bao gồm tất cả các chứng chỉ. Từ đường dẫn trên, tôi chỉ cần bao gồm các chứng chỉ đi trước chứng chỉ Websense (Cấp CA 1, CA chính sách, CA gốc).

Khi các certs tự ký này được lưu vào tệp PEM, chúng tôi sẵn sàng hướng dẫn npm sử dụng các chứng chỉ này làm CA đáng tin cậy của chúng tôi. Đơn giản chỉ cần đặt tập tin cấu hình và bạn sẽ thấy tốt:

npm config set cafile "C:\yourcerts.pem"

Giờ đây, với các proxy được đặt (http và https) và sổ đăng ký được đặt thành https://registry.npmjs.org, bạn sẽ có thể cài đặt các gói phía sau tường lửa công ty với các chứng chỉ tự ký mà không cần strict-sslcài đặt.

4 hữu ích 0 bình luận chia sẻ
3

Hãy thử điều này, Đặt proxy trong npm như sau

npm config set proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set https-proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"
3 hữu ích 0 bình luận chia sẻ
2

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.

Điều này làm việc cho tôi ...

2 hữu ích 0 bình luận chia sẻ
2

Nếu bạn đứng sau một mạng công ty có proxy, tôi chỉ sử dụng công cụ proxy ntlm và sử dụng cổng và proxy được cung cấp bởi ntlm, vì tôi đã sử dụng cấu hình này:

strict-ssl=false
proxy=http://localhost:3125

Tôi hi vọng cái này giúp được.

2 hữu ích 0 bình luận chia sẻ
2

Sử dụng lệnh dưới đây tại cmd hoặc GIT Bash hoặc dấu nhắc khác

$ npm config set proxy "http://192.168.1.101:4128"

$ npm config set https-proxy "http://192.168.1.101:4128"

trong đó 192.168.1.101 là ip proxy và 4128 là cổng. thay đổi theo cài đặt proxy của bạn.

2 hữu ích 0 bình luận chia sẻ
2

Bạn phải sử dụng "npm config set http-proxy "

sử dụng:

npm config set http-proxy http://1.2.3.4:8181
npm config set https-proxy http://1.2.3.4:8181
2 hữu ích 0 bình luận chia sẻ
1

Trong công việc, chúng tôi sử dụng ZScaler làm proxy. Cách duy nhất tôi có thể khiến npm hoạt động là sử dụng Cntlm .

Xem câu trả lời này:

NPM đằng sau proxy NTLM

1 hữu ích 0 bình luận chia sẻ
1

Hãy thử điều này, đó là điều duy nhất làm việc cho tôi:

npm --proxy http: //: @proxyhost: --https-proxy http: //: @proxyhost: --strict-ssl gói cài đặt sai -g

Chú ý đến tùy chọn --strict-ssl false

Chúc may mắn.

1 hữu ích 0 bình luận chia sẻ
1

Các NPM thiết lập proxy được đề cập trong câu trả lời chấp nhận giải quyết vấn đề, nhưng khi bạn có thể thấy trong này vấn đề NPM , một số phụ thuộc sử dụng GIT và làm cho các thiết lập git ủy quyền cần thiết , và có thể được thực hiện như sau:

git config --global http.proxy http://username:password@host:port
git config --global https.proxy http://username:password@host:port

Thiết lập proxy NPM đã đề cập:

npm config set proxy "http://username:password@host:port"
npm config set https-proxy "http://username:password@host:port"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"
1 hữu ích 0 bình luận chia sẻ
0

Tôi gặp vấn đề tương tự và tôi đã thử tất cả các cách giải quyết ở trên nhưng không ai trong số họ làm việc cho tôi (tôi đang sử dụng các ký tự đặc biệt (như biểu tượng '@') trong mật khẩu của mình và tôi cũng cần thêm tên miền).

Ngoài ra, tôi hơi e ngại khi thêm mật khẩu của mình dưới dạng văn bản thuần túy. Hóa ra giải pháp đơn giản nhất để vượt qua tất cả những thách thức này là sử dụng một số loại proxy ngược (như Fiddler).

Tôi đã chi tiết các bước cấu hình trong câu trả lời này trong SO.

0 hữu ích 0 bình luận chia sẻ
0

Thêm các dòng dưới đây trong tệp .typingsrc đã giúp tôi.

{
    "rejectUnauthorized": false,
    "registryURL" :"http://api.typings.org/"
 }
0 hữu ích 0 bình luận chia sẻ
0

Tôi gặp vấn đề tương tự và phát hiện ra rằng tệp cấu hình npm của tôi (.npmrc) đang có mục đăng ký sai. bình luận nó ra và chạy lại cài đặt npm. nó đã làm việc.

0 hữu ích 0 bình luận chia sẻ
0

HĐH: Windows 7

Các bước làm việc cho tôi:

  1. npm config get proxy
  2. npm config get https-proxy

  3. Nhận xét: Tôi đã thực thi lệnh này để biết cài đặt proxy của mình
    npm config rm proxy

  4. npm config rm https-proxy
  5. npm config set registry=http://registry.npmjs.org/
  6. npm install
0 hữu ích 0 bình luận chia sẻ
0

Vì tôi vẫn gặp sự cố với cài đặt proxy tại nơi làm việc và tắt chúng ở nhà, tôi đã viết kịch bản và xuất bản npm-corpo-proxy.sh . Trong mỗi corpo, mật khẩu phải được thay đổi thường xuyên và phải chứa các ký tự đặc biệt, phải được mã hóa trước khi cung cấp cấu hình npm (giống với tên miền backash domain \ user).

0 hữu ích 0 bình luận chia sẻ
0

Từ một tìm kiếm nhỏ trên google, điều đầu tiên tôi đã thử là

npm config set registry http://registry.npmjs.org/
npm config set proxy "your proxy"
npm config set https-proxy "your proxy"

Nhưng npm dường như vẫn mất kết nối khi cố gắng thực hiện "npm install". sau đó tôi chạy dòng này trong dấu nhắc lệnh và bây giờ tôi có thể sử dụng cài đặt npm

set NODE_TLS_REJECT_UNAUTHORIZED=0
0 hữu ích 0 bình luận chia sẻ
0

Tôi không thể làm cho nó hoạt động với CNTLM. Tôi đã thử làm theo tất cả các thông tin được đăng ở trên, nhưng proxy vẫn không cho phép kết nối. Với Fiddler, bạn chỉ cần cài đặt nó và kiểm tra tùy chọn Tự động xác thực. Nhưng để làm việc, tôi phải xóa tệp .npmrc khỏi thư mục người dùng của mình và đặt các biến môi trường như được chỉ ra ở đây , với các giá trị sau:

set npm_config_https-proxy="http://127.0.0.1:8888"

set npm_config_registry="http://registry.npmjs.org/"
0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ node.js npm proxy pac npm-config , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading