Câu trả lời:
Tôi đã giải quyết vấn đề này theo cách này:
Tôi chạy lệnh này:
npm config set strict-ssl false
Sau đó, đặt npm để chạy với http, thay vì https:
npm config set registry "http://registry.npmjs.org/"
Sau đó, tôi cài đặt các gói bằng cú pháp này:
npm --proxy http://username:password@cacheaddress.com.br:80 install packagename
Bỏ qua username:password
phần nếu proxy không yêu cầu bạn xác thực
EDIT: Một người bạn của tôi chỉ ra rằng bạn có thể khiến NPM hoạt động phía sau proxy bằng cách đặt các biến môi trường BOTH HTTP_PROXY và HTTPS_PROXY, sau đó ban hành lệnh npm install express (ví dụ)
EDIT2: Như @BStruthers đã nhận xét, hãy nhớ rằng mật khẩu chứa "@" sẽ không được phân tích cú pháp chính xác, nếu có chứa @ đặt toàn bộ mật khẩu trong dấu ngoặc kép
my@password
, tệp .npmrc của bạn sẽ có my%40password
phần mật khẩu. Đặt nó trong dấu ngoặc kép hoạt động trong một số trường hợp, nhưng mã hóa nó là hoàn hảo.
Cài đặt npm
proxy
Dành cho HTTP
:
npm config set proxy http://proxy_host:port
Dành cho HTTPS
:
sử dụng địa chỉ proxy https nếu có
npm config set https-proxy https://proxy.company.com:8080
sử dụng lại địa chỉ proxy http
npm config set https-proxy http://proxy.company.com:8080
Lưu ý : Proxy https không có https
giao thức, nhưng http
.
Khi nghi ngờ, hãy thử tất cả các lệnh này, như tôi làm:
npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false
set HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
set HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export http_proxy=http://myusername:mypassword@proxy.us.somecompany:8080
npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 \
--without-ssl --insecure -g install
=======
Đặt cài đặt của bạn vào ~/.bashrc
hoặc ~/.bash_profile
để bạn không phải lo lắng về cài đặt của mình mỗi khi bạn mở một cửa sổ đầu cuối mới!
Nếu công ty của bạn giống như tôi, tôi phải thay đổi mật khẩu khá thường xuyên. Vì vậy, tôi đã thêm các mục sau vào ~ / .bashrc hoặc ~ / .bash_profile để bất cứ khi nào tôi mở một thiết bị đầu cuối, tôi biết npm của tôi được cập nhật!
Chỉ cần dán đoạn mã sau vào cuối ~/.bashrc
tệp của bạn :
######################
# User Variables (Edit These!)
######################
username="myusername"
password="mypassword"
proxy="mycompany:8080"
######################
# Environement Variables
# (npm does use these variables, and they are vital to lots of applications)
######################
export HTTPS_PROXY="http://$username:$password@$proxy"
export HTTP_PROXY="http://$username:$password@$proxy"
export http_proxy="http://$username:$password@$proxy"
export https_proxy="http://$username:$password@$proxy"
export all_proxy="http://$username:$password@$proxy"
export ftp_proxy="http://$username:$password@$proxy"
export dns_proxy="http://$username:$password@$proxy"
export rsync_proxy="http://$username:$password@$proxy"
export no_proxy="127.0.0.10/8, localhost, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16"
######################
# npm Settings
######################
npm config set registry http://registry.npmjs.org/
npm config set proxy "http://$username:$password@$proxy"
npm config set https-proxy "http://$username:$password@$proxy"
npm config set strict-ssl false
echo "registry=http://registry.npmjs.org/" > ~/.npmrc
echo "proxy=http://$username:$password@$proxy" >> ~/.npmrc
echo "strict-ssl=false" >> ~/.npmrc
echo "http-proxy=http://$username:$password@$proxy" >> ~/.npmrc
echo "http_proxy=http://$username:$password@$proxy" >> ~/.npmrc
echo "https_proxy=http://$username:$password@$proxy" >> ~/.npmrc
echo "https-proxy=http://$username:$password@$proxy" >> ~/.npmrc
######################
# WGET SETTINGS
# (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
######################
echo "https_proxy = http://$username:$password@$proxy/" > ~/.wgetrc
echo "http_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
echo "ftp_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
echo "use_proxy = on" >> ~/.wgetrc
######################
# CURL SETTINGS
# (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
######################
echo "proxy=http://$username:$password@$proxy" > ~/.curlrc
Sau đó chỉnh sửa các trường "tên người dùng", "mật khẩu" và "proxy" trong mã bạn đã dán.
Mở một thiết bị đầu cuối mới
Kiểm tra cài đặt của bạn bằng cách chạy npm config list
vàcat ~/.npmrc
Cố gắng cài đặt mô-đun của bạn bằng cách sử dụng
npm install __
, hoặc là npm --without-ssl --insecure install __
, hoặc là npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __
.-g
npm config set registry http://registry.npmjs.org/
, npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
, npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
, npm config set strict-ssl false
cho cấu hình NPM và sau đó cài đặt gói NPM sử dụng npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}
. Cảm ơn
Bạn đã thử các tùy chọn dòng lệnh thay vì .npmrc
tệp?
Tôi nghĩ rằng một cái gì đó như npm --proxy http://proxy-server:8080/ install {package-name}
làm việc cho tôi.
Tôi cũng đã thấy như sau:
npm config set proxy http://proxy-server:8080/
Mặc dù đã có nhiều lời khuyên tốt, nhưng đối với môi trường của tôi (Windows 7, sử dụng PowerShell) và phiên bản cuối cùng có sẵn của node.js (v8.1.2), tất cả các cách trên đều không hoạt động, ngoại trừ khi tôi làm theo các cài đặt của brunowego .
Vì vậy, hãy kiểm tra cài đặt của bạn với:
npm config list
Cài đặt phía sau proxy:
npm config set registry http://registry.npmjs.org/
npm config set http-proxy http://username:password@ip:port
npm config set https-proxy http://username:password@ip:port
npm config set proxy http://username:password@ip:port
npm set strict-ssl false
Hy vọng điều này sẽ tiết kiệm thời gian cho ai đó
Điều này làm việc cho tôi trong Windows:
npm config set proxy http://domain%5Cuser:pass@host:port
Nếu bạn không ở trong bất kỳ miền nào, hãy sử dụng:
npm config set proxy http://user:pass@host:port
Nếu mật khẩu của bạn chứa các ký tự đặc biệt như "
, @
, :
và như vậy, thay thế chúng bằng URL mã hóa giá trị của họ. Ví dụ "
:> %22
, @
-> %40
, :
-> %3A
. %5C
được sử dụng cho các nhân vật \
.
encodeURIComponent("YourP@ssword")
để lấy phiên bản được mã hóa của mật khẩu.
Để thiết lập proxy http, hãy đặt cờ -g :
sudo npm config set proxy http://proxy_host:port -g
Đối với proxy https, một lần nữa đảm bảo cờ -g được đặt:
sudo npm config set https-proxy http://proxy_host:port -g
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port
Điều này làm việc cho tôi-
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false
vim ~/.npmrc
trong máy Linux của bạn và thêm vào sau. Đừng quên thêm registry
một phần vì điều này gây ra thất bại trong nhiều trường hợp.
proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/
https-proxy=https://..
thànhhttps-proxy=http://..
Cuối cùng tôi đã quản lý để giải quyết vấn đề này là phía sau proxy với xác thực AD. Tôi đã phải thực hiện:
npm config set proxy http://domain%5Cuser:password@proxy:port/
npm config set https-proxy http://domain%5Cuser:password@proxy:port/
Điều rất quan trọng là mã hóa URL bất kỳ ký tự đặc biệt nào như backshlash hoặc # Trong trường hợp của tôi, tôi phải mã hóa
backshlash
với% 5C nên domain\user will
đượcdomain%5Cuser
#
ký với %23%0A
mật khẩu như vậy Password#2
sẽ đượcPassword%23%0A2
Tôi cũng đã thêm các cài đặt sau:
npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/
Mặc dù tôi đặt proxy với cấu hình, vấn đề không được giải quyết nhưng sau đó, cái này hoạt động với tôi:
npm --https-proxy http://XX.AA.AA.BB:8080 cài đặt cordova-plugin
npm --proxy http://XX.AA.AA.BB:8080 cài đặt
Tôi đã thử tất cả các tùy chọn này, nhưng proxy của tôi không có bất kỳ tùy chọn nào vì một số lý do. Sau đó, sinh ra từ sự miệt thị / tuyệt vọng, tôi đã thử ngẫu nhiên curl
trong vỏ Git Bash của mình và nó đã hoạt động.
Bỏ cài đặt tất cả các tùy chọn proxy bằng cách sử dụng
npm config rm proxy
npm config rm https-proxy
Và sau đó chạy npm install
trong vỏ Git Bash của tôi hoạt động hoàn hảo. Tôi không biết làm thế nào nó được thiết lập chính xác cho proxy và cmd
lời nhắc của Windows thì không, nhưng nó đã hoạt động.
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/
Điều này đã giải quyết vấn đề của tôi.
Sau khi buộc các câu trả lời khác nhau cuối cùng, bốn dòng đầu tiên của câu trả lời của @Kayvar giúp tôi giải quyết vấn đề:
npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false
Điều này làm việc cho tôi. Đặt proxy http và https.
Đối với tôi mặc dù python v.v ... tất cả sẽ hoạt động mặc dù npm proxy công ty của chúng tôi sẽ không.
Tôi đã thử
npm config set proxy http://proxyccc.xxx.ca:8080
npm config set https-proxy https://proxyccc.xxx.ca:8080
npm config set registry http://registry.npmjs.org/
như được hướng dẫn nhưng vẫn nhận được cùng một lỗi.
Chỉ đến khi tôi gỡ bỏ
https-proxy https://proxyccc.xxx.ca:8080
tệp .npmrc thì npm mới cài đặt electron --save-dev mới hoạt động
https-proxy
có lẽ không phải https:
. Ít nhất, có cùng một cổng cho mỗi cái có lẽ không đúng, nhưng tôi nghĩ cả hai có thể có cùng một giá trị.
Trên hệ thống Windows
Hãy thử xóa proxy và cài đặt đăng ký (nếu đã được đặt) và đặt biến môi trường trên dòng lệnh thông qua
SET HTTP_PROXY=http://username:password@domain:port
SET HTTPS_PROXY=http://username:password@domain:port
sau đó thử chạy cài đặt npm. Bằng cách này, bạn sẽ không đặt proxy trong .npmrc nhưng phiên đó sẽ hoạt động.
SET HTTP_PROXY http://username:password@domain:port
nhưng chuyển sang SET HTTP_PROXY=http://username:password@domain:port
dường như để mọi thứ hoạt động
Sử dụng lệnh dưới đây tại cmd hoặc GIT Bash hoặc dấu nhắc khác
Cấu hình $ npm đặt proxy " http://192.168.1.101:4128 "
Cấu hình $ npm đặt 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. nó làm việc cho tôi
Rất nhiều ứng dụng (ví dụ npm) có thể sử dụng cài đặt proxy từ các biến môi trường người dùng.
Bạn chỉ có thể thêm vào môi trường của mình theo các biến HTTP_PROXY và HTTPS_PROXY sẽ có cùng giá trị cho mỗi biến
http: // người dùng: password @ proxyAddress: proxyPort
Ví dụ: nếu bạn có Windows, bạn có thể thêm proxy như sau:
Trong trường hợp của tôi, tôi đã quên đặt "http: //" trong các tệp cấu hình của mình (có thể tìm thấy trong các địa chỉ proxy C: \ Users \ [USERNAME] \ .npmrc). Vì vậy, thay vì có
proxy=http://[IPADDRESS]:[PORTNUMBER]
https-proxy=http://[IPADDRESS]:[PORTNUMBER]
Tôi đã có
proxy=[IPADDRESS]:[PORTNUMBER]
https-proxy=[IPADDRESS]:[PORTNUMBER]
Điều này tất nhiên không hoạt động, nhưng các thông báo lỗi cũng không giúp được gì nhiều ...
Đã có nhiều câu trả lời ở trên cho câu hỏi này, nhưng không có câu trả lời nào phù hợp với tôi. Tất cả chúng được đề cập để thêm http://
tiền tố. Vì vậy, tôi cũng thêm nó. Tất cả đều thất bại.
Cuối cùng nó hoạt động sau khi tôi vô tình loại bỏ http://
tiền tố. Cấu hình cuối cùng là như thế này:
npm config set registry http://registry.npmjs.org/
npm config set http-proxy ip:port
npm config set https-proxy ip:port
npm config set proxy ip:port
npm set strict-ssl false
Tôi không biết logic đằng sau này, nhưng nó đã hoạt động. Nếu không có câu trả lời nào ở trên phù hợp với bạn, có lẽ bạn có thể thử theo cách này. Hy vọng điều này là hữu ích.
Có thông tin tốt trên trang của curl về các vấn đề SSL và chứng chỉ . Tôi căn cứ hầu hết câu trả lời của tôi vào thông tin ở đó.
Sử dụng sai-ssl sai là thực tiễn xấu và có thể tạo ra vấn đề. Thay vào đó, những gì chúng ta có thể làm là thêm chứng chỉ đang được tiêm, bởi chứng chỉ "người ở giữa".
Cách giải quyết vấn đề này trên Windows:
openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
npm config set cafile **C:\Users\username\cacert.pem
npm config set strict-ssl true
Phù! Chúng tôi thực hiện nó! Bây giờ npm có thể hiểu làm thế nào để kết nối. Phần thưởng là bạn có thể yêu cầu curl sử dụng cùng một cabundle.pem và nó cũng sẽ hiểu HTTP.
Dưới đây là các bước mà tôi đã làm theo (Windows):
C:\Users\<WIN_USERNAME>\.npmrc
Xuất chứng chỉ vào hệ thống tệp của bạn từ địa chỉ sau: https://registry.npmjs.org
Điều hướng đến vị trí chứng chỉ đã xuất và ban hành lệnh sau:
npm config set cafile npm_certificate.cer
Thêm các thay đổi sau vào tệp:
registry=https://registry.npmjs.org/
strict-ssl=false
https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/
cafile=npm_certificate.cer
Bây giờ bạn nên sẵn sàng để đi!
Vấn đề của tôi đã đi đến một sai lầm ngớ ngẩn về phía tôi. Vì một ngày nọ, tôi đã nhanh chóng bỏ các proxy của mình vào một tệp windows * .bat (http_proxy, https_proxy và ftp_proxy), tôi đã quên thoát các ký tự đặc biệt cho miền được mã hóa url \ user (% 5C) và mật khẩu có dấu chấm hỏi '?' (% 3F). Điều đó có nghĩa là, một khi bạn có lệnh được mã hóa, đừng quên thoát '%' trong lệnh tập tin bat.
tôi đã thay đổi
set http_proxy=http://domain%5Cuser:password%3F@myproxy:8080
đến
set http_proxy=http://domain%%5Cuser:password%%3F@myproxy:8080
Có thể đó là một trường hợp cạnh nhưng hy vọng nó sẽ giúp được ai đó.
khi tôi cung cấp mà không có tiền tố http / http trong cài đặt proxy thì npm không thành công ngay cả khi máy chủ proxy và cổng là giá trị đúng. Nó chỉ hoạt động sau khi thêm tiền tố giao thức.
Chỉ cần mở thiết bị đầu cuối mới và gõ npm config edit
và npm config -g edit
. Đặt lại về mặc định. Sau khi đóng thiết bị đầu cuối đó, mở cái mới và gõ npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>
nếu bạn cần trên toàn cầu chỉ cần thêm -g
.
Nó làm việc cho tôi, hy vọng nó sẽ làm việc cho bạn :)