มีวิธีที่จะทำให้การติดตั้ง npm (คำสั่ง) ทำงานหลังพรอกซีหรือไม่


266

อ่านเกี่ยวกับตัวแปรพร็อกซีใน.npmrcไฟล์ แต่ใช้งานไม่ได้ พยายามหลีกเลี่ยงการดาวน์โหลดด้วยตนเองทั้งหมดต้องใช้แพ็คเกจและติดตั้ง

คำตอบ:


343

ฉันแก้ไขปัญหานี้ด้วยวิธีนี้:

  1. ฉันรันคำสั่งนี้:

    npm config set strict-ssl false
  2. จากนั้นตั้งค่า npm ให้ทำงานด้วย http แทน https:

    npm config set registry "http://registry.npmjs.org/"
  3. จากนั้นฉันติดตั้งแพคเกจโดยใช้ไวยากรณ์นี้:

    npm --proxy http://username:password@cacheaddress.com.br:80 install packagename

ข้ามusername:passwordส่วนนี้ไปหากพร็อกซีไม่ต้องการให้คุณตรวจสอบสิทธิ์

แก้ไข: เพื่อนของฉันเพิ่งชี้ให้เห็นว่าคุณอาจได้รับ NPM ทำงานหลังพร็อกซีโดยการตั้งค่าตัวแปรสภาพแวดล้อมทั้ง HTTP_PROXY และ HTTPS_PROXY จากนั้นออกคำสั่ง npm install express (ตัวอย่าง)

EDIT2: ตามที่ @BStruthers แสดงความคิดเห็นโปรดทราบว่ารหัสผ่านที่มี "@" จะไม่ถูกวิเคราะห์อย่างถูกต้องหากมี @ ให้ใส่รหัสผ่านทั้งหมดในเครื่องหมายคำพูด


7
หัวขึ้นถ้ารหัสผ่านของคุณมี "@" npm จะไม่แยกการตั้งค่าพร็อกซีของคุณอย่างถูกต้อง วิธีแก้ปัญหาที่อาจเกิดขึ้นคือการใส่ชื่อผู้ใช้ปลอม: รหัสผ่านในการกำหนดค่า npm และใช้พร็อกซีในพื้นที่ (เช่นพู้ทำเล่น) เพื่อแก้ไขส่วนหัวการอนุญาตให้ใช้สิทธิ์ของคำขอเพื่อให้มีชื่อผู้ใช้ที่ถูกต้อง: รหัสผ่าน โปรดทราบว่าชื่อผู้ใช้: รหัสผ่านที่จัดเก็บในการอนุญาตพร็อกซีถูกเข้ารหัส base64
BStruthers

14
หากรหัสผ่านของคุณมีสัญลักษณ์ @ คุณสามารถส่งผ่านได้โดยใส่ชื่อผู้ใช้และรหัสผ่านของคุณไว้ในเครื่องหมายคำพูด
absynthe เว็บที่มีจิตใจที่ชาญฉลาดสมิ ธ ที่

9
คุณสามารถมีอักขระพิเศษในรหัสผ่านของคุณ แต่จะต้องมีการเข้ารหัส URL ดังนั้นหากรหัสผ่านของคุณคือmy@passwordไฟล์. npmrc ของคุณควรมีmy%40passwordส่วนของรหัสผ่าน การใส่ไว้ในเครื่องหมายคำพูดใช้งานได้ในบางกรณี แต่การเข้ารหัสนั้นไม่สามารถป้องกันได้
Chris Jaynes

1
gotcha อีก! หากคุณมีตัวแปรระบบชุดก่อนหน้าHTTP-PROXYให้แน่ใจว่าคุณล้างพวกเขา!
Sydwell

1
คุณตำนาน! ฉันเลิกใช้ความพยายามที่จะได้รับ npm ในที่ทำงาน แต่ในที่สุดก็แก้ไขได้
tamj0rd2

308

ตั้งค่าnpmพร็อกซี

สำหรับHTTP:

npm config set proxy http://proxy_host:port

สำหรับHTTPS:

ใช้ที่อยู่พร็อกซี https หากมี

npm config set https-proxy https://proxy.company.com:8080

มิฉะนั้นจะใช้ที่อยู่พร็อกซี http อีกครั้ง

npm config set https-proxy http://proxy.company.com:8080

หมายเหตุ : ผู้ https-พร็อกซี่ไม่ได้httpsเป็นโปรโตคอล httpแต่


9
ไม่รองรับ SOCKS?
กรัม

57
โปรดทราบว่า https-proxy ไม่มี 'https' เป็นโปรโตคอล แต่เป็น 'http' การเปลี่ยนแปลงนี้แก้ไขปัญหาให้ฉันได้
peterhil

3
@ peterhil ขอบคุณสำหรับเคล็ดลับนั้น มันบ้า แต่ฉันใช้เวลาหลายชั่วโมงเพื่อแก้ปัญหานี้ด้วย "https" มีความคิดว่าทำไมมันถึงทำงานแบบนี้?
Manoj NV

2
@ManojNV การเชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์ไม่ได้เข้ารหัส ไม่ได้พูดถึง HTTPS กับพร็อกซีเซิร์ฟเวอร์เพียงแค่ HTTP เพย์โหลดเป็น SSL ระหว่างไคลเอนต์และเซิร์ฟเวอร์ปลายทาง หากเป็น HTTPS ไปยังพร็อกซีเซิร์ฟเวอร์สิ่งต่าง ๆ จะได้รับการเข้ารหัส / ถอดรหัสสองครั้ง
Jamie

1
บอบบาง ขอบคุณ @peterhil มาก
Alec Breton

104

เมื่อมีข้อสงสัยลองคำสั่งทั้งหมดเหล่านี้เช่นฉัน:

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

=======

UPDATE

ใส่การตั้งค่าของคุณ~/.bashrcหรือ~/.bash_profileดังนั้นคุณไม่ต้องกังวลเกี่ยวกับการตั้งค่าทุกครั้งที่คุณเปิดหน้าต่างเทอร์มินัลใหม่

หาก บริษัท ของคุณเหมือนของฉันฉันต้องเปลี่ยนรหัสผ่านบ่อยๆ ดังนั้นฉันจึงเพิ่มสิ่งต่อไปนี้ลงใน ~ / .bashrc หรือ ~ / .bash_profile ของฉันดังนั้นทุกครั้งที่ฉันเปิดเทอร์มินัลฉันรู้ว่า npm ของฉันทันสมัยแล้ว!

  1. เพียงวางรหัสต่อไปนี้ที่ด้านล่างของ~/.bashrcไฟล์ของคุณ:

    ######################
    # 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
  2. จากนั้นแก้ไขฟิลด์ "ชื่อผู้ใช้", "รหัสผ่าน" และ "พร็อกซี" ในรหัสที่คุณวาง

  3. เปิดเทอร์มินัลใหม่

  4. ตรวจสอบการตั้งค่าของคุณโดยเรียกใช้npm config listและcat ~/.npmrc

  5. ลองติดตั้งโมดูลของคุณโดยใช้

    • npm install __, หรือ
    • npm --without-ssl --insecure install __, หรือ
    • npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __แทนที่การตั้งค่าพร็อกซีของคุณโดยใช้
    • หากคุณต้องการให้โมดูลนั้นพร้อมใช้งานทั่วโลกให้เพิ่มตัวเลือก -g

3
คำสั่งสุดท้ายใช้งานได้สำหรับฉัน สิ่งทั้งหมดก่อนหน้านั้นล้มเหลว
foecum

3
ฉันอ่านประมาณ 50 คำตอบเกี่ยวกับการกำหนดค่าพร็อกซีไอเอ็นจีนี้ ... สิ่งเดียวที่ใช้ได้คือคำตอบของคุณ ... ขอบคุณ !!!
Lorenzo

4
ขอบคุณเพื่อน!! ดีใจที่มันใช้งานได้! นี่เป็นอาการปวดหัวอย่างมากในที่ทำงานดังนั้นฉันจึงดีใจที่ฉันสามารถช่วยเหลือผู้อื่นได้: P
Katie

2
+1 วิธีนี้ใช้ได้ผล ผมใช้ commands- 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สำหรับ NPM การกำหนดค่าและติดตั้งแล้วแพคเกจ NPM npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}ใช้ ขอบคุณ
Atur

1
หลังจากสามวันของการลองวิธีแก้ปัญหานี้ได้ผลสำหรับฉัน
Mohan Singh เมื่อ

33

คุณลองตัวเลือกบรรทัดคำสั่งแทน.npmrcไฟล์แล้วหรือยัง

ฉันคิดว่าสิ่งที่ชอบnpm --proxy http://proxy-server:8080/ install {package-name}สำหรับฉัน

ฉันได้เห็นสิ่งต่อไปนี้ด้วย: npm config set proxy http://proxy-server:8080/


+1 ฉันลองใช้คนอื่นนี่เป็นคนที่ทำงานให้ฉัน กับส่วนรับรองความถูกต้องจาก Renato Gama
winner_joiner

20

แม้ว่าจะมีคำแนะนำที่ดีอยู่แล้ว แต่สำหรับสภาพแวดล้อมของฉัน (Windows 7 โดยใช้ PowerShell) และรุ่นล่าสุดที่มีอยู่ของ node.js (v8.1.2) ทั้งหมดข้างต้นไม่ได้ทำงานยกเว้นเมื่อฉันทำตามการตั้งค่าbrunowego

ดังนั้นตรวจสอบการตั้งค่าของคุณด้วย:

npm config list

การตั้งค่าหลังพร็อกซี:

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

หวังว่านี่จะช่วยประหยัดเวลากับใครบางคน


ฉันจะหาที่อยู่พร็อกซีของฉันได้อย่างไร
Robin

@ Robin วิธีหนึ่งถ้าใช้ windows, IE จะเก็บไว้ คุณสามารถไปที่ IE และดูการตั้งค่า LAN ภายใต้การเชื่อมต่อและมันจะแสดงที่นั่น
eaglei22

@ Robin แน่นอนขึ้นอยู่กับเบราว์เซอร์ แต่มักจะอยู่ภายใต้การตั้งค่า
Carmine Tambascia

@ หมุนในเบราว์เซอร์ภายใต้การตั้งค่าคุณควรเห็น / ตรวจสอบการตั้งค่าพร็อกซี โดยปกติจะมีไฟล์ที่มี. pac ซึ่งควรเป็นไฟล์สุดท้าย: PROXY YourProxy ที่อยู่: PORT
Carmine Tambascia

17

สิ่งนี้ใช้ได้กับฉันใน Windows:

npm config set proxy http://domain%5Cuser:pass@host:port

หากคุณไม่ได้อยู่ในโดเมนใด ๆ ให้ใช้:

npm config set proxy http://user:pass@host:port

ถ้ารหัสผ่านของคุณมีอักขระพิเศษเช่น", @, :และอื่น ๆ แทนที่พวกเขาด้วยค่าเข้ารหัส URL ของพวกเขา ยกตัวอย่างเช่น"-> %22, @-> %40, ->: จะใช้สำหรับตัวละคร%3A%5C\


6
ขอบคุณสำหรับคำแนะนำสิ่งนี้ใช้ได้กับฉัน คุณสามารถเปิดคอนโซล javascript ด้วย ctrl + shift + j แล้วพิมพ์encodeURIComponent("YourP@ssword")เพื่อรับรหัสที่เข้ารหัสของคุณ
jaggedsoft

15

หากต้องการตั้งค่าพร็อกซี http ให้ตั้งค่าสถานะ-g :

sudo npm config set proxy http://proxy_host:port -g

สำหรับพร็อกซี https ให้ตรวจสอบให้แน่ใจว่าตั้งค่าสถานะ-g แล้ว :

sudo npm config set https-proxy http://proxy_host:port -g


ความหมายของ -g คืออะไร?
เดวิด

1
ตั้งค่าทั่วโลกไม่ใช่สำหรับการติดตั้งในระบบ
อังเดร


8

สิ่งนี้ใช้ได้กับฉัน -

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false

7

vim ~/.npmrcในเครื่อง Linux ของคุณและเพิ่มการติดตาม อย่าลืมเพิ่มregistryส่วนหนึ่งเนื่องจากความล้มเหลวในหลายกรณี

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/

2
พร็อกซีจำนวนมากสนับสนุนการร้องขอการสร้างอุโมงค์ เช่นนี้เมื่อมีปัญหาลองปรับเปลี่ยนhttps-proxy=https://..เป็นhttps-proxy=http://..
โยโย่

7

ในที่สุดฉันก็มีการจัดการเพื่อแก้ปัญหานี้อยู่เบื้องหลังพร็อกซีที่มีการตรวจสอบโฆษณา ฉันต้องดำเนินการ:

npm config set proxy http://domain%5Cuser:password@proxy:port/
npm config set https-proxy http://domain%5Cuser:password@proxy:port/

มันสำคัญมากที่จะต้องเข้ารหัส URL ตัวอักษรพิเศษใด ๆ เช่น backshlash หรือ # ในกรณีของฉันฉันต้องเข้ารหัส

  1. backshlashด้วย% 5C เพื่อให้domain\user willเป็นdomain%5Cuser
  2. #ลงชื่อเข้าใช้ด้วย%23%0Aรหัสผ่านเช่นนั้นPassword#2นั้นจะเป็นPassword%23%0A2

ฉันได้เพิ่มการตั้งค่าต่อไปนี้ด้วย:

npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/

6

แม้ว่าฉันจะตั้งค่าพร็อกซีที่มีการตั้งค่าปัญหาก็ไม่ได้รับการแก้ไข แต่หลังจากที่หนึ่งนี้ทำงานให้ฉัน:

npm --https-proxy http://XX.AA.AA.BB:8080ติดตั้ง -plugins

npm --proxy http://XX.AA.AA.BB:8080ติดตั้ง


อันนี้ใช้ได้สำหรับฉันไม่มีการเปลี่ยนแปลงอื่น ๆ เปิดหน้าต่างคำสั่งและใช้งานด้านบนและจะใช้งานได้
AKS

6

ฉันลองใช้ตัวเลือกทั้งหมดเหล่านี้แล้ว แต่พร็อกซีของฉันไม่มีปัญหาใด ๆ จากนั้นเกิดมาจากความสิ้นหวัง / ความสิ้นหวังฉันได้ลองcurlในเปลือก Git Bash ของฉันและมันก็ใช้ได้

การยกเลิกการตั้งค่าตัวเลือกพร็อกซีทั้งหมดโดยใช้

npm config rm proxy
npm config rm https-proxy

และจากนั้นทำงานnpm installในเชลล์ Git Bash ของฉันทำงานได้อย่างสมบูรณ์ ฉันไม่ทราบวิธีการตั้งค่าอย่างถูกต้องสำหรับพร็อกซีและ Windows cmdพรอมต์ไม่ได้ แต่มันทำงานได้


6
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/

นี่เป็นการแก้ไขปัญหาของฉัน


สิ่งสำคัญคือการเปลี่ยนลิงค์ไปยังรีจิสตรี: แทนที่จะเป็น https ที่ฉันมีก่อนหน้านี้เป็นลิงค์
Alex Fainshtein

6

หลังจากคาดเดาคำตอบที่แตกต่างกันในที่สุดสี่บรรทัดแรกของ @Kayvar ช่วยฉันแก้ปัญหา

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


5

ลองค้นหา. npmrc ใน C: \ Users \ .npmrc

จากนั้นเปิด (แผ่นจดบันทึก) เขียนและบันทึกภายใน:

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

PS: ลบ "<" และ ">" ได้โปรด !!


5

สำหรับฉันแม้ว่าหลาม ฯลฯ จะทำงานได้ดีแม้ว่าพร็อกซี Corporate ของเราจะไม่ทำงาน

ฉันเหนื่อย

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/

ตามคำแนะนำ แต่ยังคงได้รับข้อผิดพลาดเดียวกัน

มันก็ต่อเมื่อฉันลบออก https-proxy https://proxyccc.xxx.ca:8080 จากไฟล์. npmrc ที่การติดตั้งอิเล็กตรอน npm --save-dev ทำงาน


1
คุณอาจจะไม่https-proxy https:อย่างน้อยการมีพอร์ตเดียวกันสำหรับแต่ละพอร์ตอาจไม่ถูกต้อง แต่ฉันคิดว่าทั้งคู่อาจมีค่าเท่ากัน
toddkaufmann

5

บนระบบ Windows

ลองลบการตั้งค่าพร็อกซีและรีจิสตรี (ถ้าตั้งค่าไว้แล้ว) และตั้งค่าตัวแปรสภาพแวดล้อมในบรรทัดคำสั่งผ่าน

SET HTTP_PROXY=http://username:password@domain:port
SET HTTPS_PROXY=http://username:password@domain:port

จากนั้นลองเรียกใช้การติดตั้ง npm โดยสิ่งนี้คุณจะไม่ได้ตั้งค่าพร็อกซีเป็น. pmrc แต่สำหรับเซสชันนั้นจะใช้งานได้


สิ่งนี้ใช้ได้สำหรับฉัน สัญลักษณ์ที่เท่าเทียมกันคือสิ่งที่ดูเหมือนว่าจะทำให้ทุกอย่างทำงาน ก่อนหน้านี้ฉันเพิ่งใช้SET HTTP_PROXY http://username:password@domain:portแต่เปลี่ยนไปSET HTTP_PROXY=http://username:password@domain:portดูเหมือนว่าจะทำให้ทุกอย่างทำงานได้ดีขึ้น
Dib

4

ใช้คำสั่งด้านล่างที่ cmd หรือ GIT Bash หรือพรอมต์อื่น ๆ

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

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

โดยที่ 192.168.1.101 เป็น proxy ip และ 4128 เป็นพอร์ต เปลี่ยนตามการตั้งค่าพร็อกซีของคุณ มันเหมาะกับฉัน


1
ฉันต้องใช้โดเมนสำหรับการตรวจสอบความถูกต้องและฉันใช้ Escape back-slash: กับสตริงนี้% 5C มันทำงานได้ในที่สุด!
Francesco

4

แอปพลิเคชั่นจำนวนมาก (เช่น npm) สามารถใช้การตั้งค่าพร็อกซีจากตัวแปรสภาพแวดล้อมของผู้ใช้

คุณสามารถเพิ่มสภาพแวดล้อมของคุณตามตัวแปรHTTP_PROXYและHTTPS_PROXYที่จะมีค่าเท่ากันสำหรับแต่ละคน

http: // ผู้ใช้: รหัสผ่าน @ proxyAddress: proxyPort

ตัวอย่างเช่นหากคุณมี Windows คุณสามารถเพิ่มพรอกซีได้ดังนี้

มันมีลักษณะอย่างไรบน Windows


4

ในกรณีของฉันฉันลืมตั้ง "http: //" ในไฟล์ config ของฉัน (สามารถพบได้ใน C: \ Users \ [USERNAME] \ .npmrc) ที่อยู่พร็อกซี ดังนั้นแทนที่จะมี

proxy=http://[IPADDRESS]:[PORTNUMBER]
https-proxy=http://[IPADDRESS]:[PORTNUMBER]

ฉันมี

proxy=[IPADDRESS]:[PORTNUMBER]
https-proxy=[IPADDRESS]:[PORTNUMBER]

หลักสูตรใดไม่ทำงาน แต่ข้อความแสดงข้อผิดพลาดไม่ได้ช่วยอะไรมาก ...


4

มีคำตอบมากมายสำหรับคำถามนี้ แต่ไม่มีคำตอบใดที่เหมาะกับฉัน ทุกคนกล่าวถึงการเพิ่มhttp://คำนำหน้า ดังนั้นฉันจึงเพิ่มมันเข้าไปด้วย ล้มเหลวทั้งหมด

ในที่สุดก็ใช้งานได้หลังจากที่ฉันลบhttp://คำนำหน้าโดยไม่ได้ตั้งใจ การกำหนดค่าสุดท้ายเป็นเช่นนี้:

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

ฉันไม่รู้ตรรกะเบื้องหลังสิ่งนี้ แต่มันใช้ได้ หากคำตอบข้างต้นไม่เหมาะกับคุณบางทีคุณอาจลองด้วยวิธีนี้ หวังว่าอันนี้มีประโยชน์


4

มีข้อมูลที่ดีในหน้าขดบนเป็นปัญหา SSL และใบรับรอง ฉันยึดคำตอบส่วนใหญ่ของฉันจากข้อมูลที่นั่น

การใช้เข้มงวด ssl false เป็นการฝึกฝนที่ไม่ดีและสามารถสร้างปัญหา สิ่งที่เราสามารถทำได้คือเพิ่มใบรับรองที่ถูกฉีดโดยใบรับรอง "คนที่อยู่ตรงกลาง"

วิธีแก้ปัญหานี้ใน Windows:

  1. ดาวน์โหลด CA Certificates จากcurlโดยใช้ชุด CA ของ Mozilla คุณยังสามารถใช้ shellscript "firefox-db2pem.sh" ของ curl เพื่อแปลงฐานข้อมูล Firefox ในเครื่องของคุณ
  2. ไปที่หน้าเว็บโดยใช้ https ตัวอย่างเช่นStackoverflowใน Chrome หรือ Internet Explorer
  3. คลิกที่ไอคอนล็อคคลิกดูใบรับรองหรือ "ถูกต้อง" ใน Chrome
  4. นำทางไปยังเส้นทางการรับรอง ใบรับรองสูงสุดหรือใบรับรองหลักคือสิ่งที่เราต้องการแยก คลิกใบรับรองนั้นจากนั้น "ดูใบรับรอง"
  5. คลิกที่แท็บที่สอง "รายละเอียด" คลิก "คัดลอกไปยังไฟล์" เลือกรูปแบบ DER แล้วจดบันทึกตำแหน่งที่คุณบันทึกไฟล์ เลือกชื่อไฟล์ที่เหมาะสมเช่น rootcert.cer
  6. หากคุณติดตั้ง Git ไว้คุณจะมี openssl.exe มิฉะนั้นติดตั้ง git สำหรับ windows ในขั้นตอนนี้ ส่วนใหญ่แล้วไฟล์ปฏิบัติการ openssl จะอยู่ที่ C: \ Program Files \ git \ usr \ bin \ openssl.exe เราจะใช้ openssl เพื่อแปลงไฟล์เป็นรูปแบบ PEM ที่เราต้องการสำหรับ NPM เพื่อทำความเข้าใจ
  7. แปลงไฟล์ที่คุณบันทึกไว้ในขั้นตอนที่ 5 โดยใช้คำสั่งนี้:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    where rootcertเป็นชื่อไฟล์ของใบรับรองที่คุณบันทึกไว้ในขั้นตอนที่ 5
  8. เปิด outcert.pem ใน text-editor ฉลาดพอที่จะเข้าใจการสิ้นสุดบรรทัดดังนั้น notepad เลือกข้อความทั้งหมดและคัดลอกไปที่คลิปบอร์ด
  9. ตอนนี้เราจะวางเนื้อหานั้นไว้ที่ส่วนท้ายของบันเดิล CA Cert ที่ทำในขั้นตอนที่ 1 ดังนั้นเปิดcacert.pemใน texteditor ขั้นสูง ไปที่จุดสิ้นสุดของไฟล์และวางเนื้อหาจากขั้นตอนก่อนหน้าไปยังจุดสิ้นสุดของไฟล์ (สงวนบรรทัดว่างไว้ด้านล่างสิ่งที่คุณเพิ่งวาง)
  10. คัดลอก cabundle.pem ที่บันทึกไว้ไปยังสถานที่ที่เหมาะสม เช่น% userprofile% หรือ ~ ของคุณ จดบันทึกตำแหน่งของไฟล์
  11. ตอนนี้เราจะบอก npm / ไหมพรมให้ใช้มัดใหม่ ใน commandline เขียน
    npm config set cafile **C:\Users\username\cacert.pem
    ที่C: \ Users \ ชื่อผู้ใช้ \ cacert.pemเป็นเส้นทางจากขั้นตอนที่ 10
  12. ทางเลือก: เปิดเข้มงวด ssl อีกครั้ง npm config set strict-ssl true

วุ้ย เราทำได้! ตอนนี้สามารถเข้าใจการเชื่อมต่อได้แล้ว โบนัสคือคุณสามารถบอกให้ขดใช้ cabundle.pem เดียวกันและจะเข้าใจ HTTPs ด้วย


3

นี่คือขั้นตอนที่ฉันได้ติดตาม (Windows):

  1. แก้ไขไฟล์ต่อไปนี้ C:\Users\<WIN_USERNAME>\.npmrc
  2. ส่งออกใบรับรองไปยังระบบไฟล์ของคุณจากที่อยู่ต่อไปนี้: https://registry.npmjs.org

  3. นำทางไปยังตำแหน่งใบรับรองที่ส่งออกและออกคำสั่งต่อไปนี้:

    npm config set cafile npm_certificate.cer

  4. เพิ่มการเปลี่ยนแปลงต่อไปนี้ในไฟล์: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

ตอนนี้คุณควรพร้อมแล้ว!


2

ปัญหาของฉันลงไปในข้อผิดพลาดโง่ ๆ ในส่วนของฉัน เนื่องจากฉันใช้เวลาหนึ่งวันส่งพรอกซีลงในไฟล์ windows * .bat (http_proxy, https_proxy และ ftp_proxy) ฉันลืมที่จะหลีกเลี่ยงอักขระพิเศษสำหรับโดเมนที่เข้ารหัส URL \ user (% 5C) และรหัสผ่านที่มีเครื่องหมายคำถาม '?' (% 3F) กล่าวคือเมื่อคุณมีคำสั่งเข้ารหัสอย่าลืมที่จะหลีกเลี่ยง '%' ในคำสั่งไฟล์ค้างคาว

ฉันเปลี่ยน

set http_proxy=http://domain%5Cuser:password%3F@myproxy:8080

ถึง

set http_proxy=http://domain%%5Cuser:password%%3F@myproxy:8080

อาจจะเป็นกรณีที่ทันสมัย ​​แต่หวังว่าจะช่วยใครบางคน


1

เมื่อฉันให้โดยไม่มีคำนำหน้า http / http ในการตั้งค่าพร็อกซี npm ล้มเหลวแม้ในขณะที่โฮสต์พร็อกซีและพอร์ตเป็นค่าที่เหมาะสม มันทำงานได้หลังจากเพิ่มคำนำหน้าโปรโตคอลเท่านั้น


0

เพียงแค่เปิดอาคารผู้โดยสารแห่งใหม่และพิมพ์และnpm config edit npm config -g editรีเซ็ตเป็นค่าเริ่มต้น หลังจากที่สถานีใกล้ที่เปิดใหม่และพิมพ์ถ้าคุณต้องการทั่วโลกเพียงแค่เพิ่มnpm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>-g

มันใช้งานได้สำหรับฉันหวังว่ามันจะใช้ได้ผลกับคุณ :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.