Щоб розгорнути відповідь на @Steve Roberts
Моє ім'я користувача має форму "домен \ ім'я користувача" - включаючи косу рису в конфігурації проксі, це призвело до появи косої риски вперед. Тож вступаючи до цього:
npm config set proxy "http://domain\username:password@servername:port/"
Я також повинен був кодувати URL-адресу моєї domain\user
рядка, проте у мене є простір всередині мого імені користувача, тому я ставлю a +
для кодування просторової URL-кодування, але він отримає подвійне кодування як %2B
(що кодує URL для знака плюс, однак URL кодування для простору є %20
), тому мені довелося замість цього зробити наступне:
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"
усунення несправностей npm config
Я використовував значення npm config list
для отримання проаналізованих значень, які я встановив вище, і саме так я дізнався про подвійне кодування. Дивно.
По суті, ви повинні визначити такі вимоги:
- Це
DOMAIN
рядок, необхідний для автентифікації
- Чи потрібно кодувати спеціальні символи?
- Пробіли та знаки (@) є особливо складними
З повагою
ВІННІ ПРОМЕНЛЕННЯ ЕКОЛОГІЇ (підказка CMD)
Оновлення
Виявляється, що навіть із вищезазначеними конфігураціями, у мене все ще виникали проблеми з деякими пакетами / сценаріями, які використовують Запит - спрощений клієнт HTTP для завантаження матеріалів. Отже, як пояснено вище readme, ми можемо вказати змінні середовища для встановлення проксі-сервера в командному рядку, а Request буде виконувати ці значення.
Потім, після (і я неохоче визнаю це) кілька спроб (більше, як днів), намагаючись встановити змінні середовища, я нарешті досяг успіху, дотримуючись наступних вказівок:
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
Я використовував вищевказану техніку протягом декількох тижнів, поки я не зрозумів, що накладне оновлення пароля в усіх інструментах, які потребували налаштування проксі.
Крім npm, я також використовую:
- бауер
- бродячий
- віртуальна скринька (працює під Linux)
- apt-get [linux]
- git
- vscode
- дужки
- атом
- цд
кроки налаштування cntlm
Отже, я встановив cntlm . Налаштування cntlm
досить чітке вперед, ви шукаєте файл ini @C:\Program Files\Cntlm\cntlm.ini
- Відкрити
C:\Program Files\Cntlm\cntlm.ini
(можуть знадобитися права адміністратора)
- шукати
Username
і Domain
лінії (рядок 8-9 я думаю)
- додати своє ім’я користувача
- додайте свій домен
У командному рядку cmd:
cd C:\Program Files\Cntlm\
cntlm -M
cntlm -H
- вам буде запропоновано пароль:
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:
Вихід, який ви отримаєте, cntlm -H
буде виглядати приблизно так:
PassLM 561DF6AF15D5A5ADG
PassNT A1D651A5F15DFA5AD
PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN'
- Рекомендується використовувати PassNTLMv2, тому додайте
#
рядок до PassLM
і PassNT
не використовуйте їх
- Вставити висновок з
cntlm -H
на іні файлу , що заміняє лінії для PassLM
, PassNT
і PassNTMLv2
, або коментар оригінальні лінії і додавати нові .
- Додайте свої
Proxy
сервери. Якщо ви не знаєте, що таке проксі-сервер ... Зробіть те, що я зробив, я шукав свій файл проконфігурації проксі, шукаючи AutoConfigURL
ключ реєстру в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
. Перейдіть до цієї URL-адреси та перегляньте код, який трапляється у JavaScript.
- Опціонально ви можете змінити порт, де слухає cntlm, змінивши
Listen ####
рядок, де ####
номер порту.
Налаштування NPM за допомогою cntlm
Отже, ви вказуєте npm на свій проксі-сервер cntml, ви можете використовувати ip, я використав localhost
і порт за замовчуванням для cntlm, 3128
так що мій URL проксі виглядає так
http://localhost:3128
За допомогою відповідної команди:
npm config set proxy http: // localhost: 3128
Набагато простіше. Ви налаштовуєте всі свої інструменти з тим самим URL-адресою, а пароль оновлюєте лише в одному місці. Життя набагато простіше не.
Потрібна настройка Сертифікат npm CA
З документації npm ca
Якщо ваш корпоративний проксі-сервер перехоплює https-зв’язки зі своїм власним самопідписаним сертифікатом, цього необхідно уникати npm config set strict-ssl false
(великий ні-ні).
Основні етапи
- Отримайте сертифікат у своєму браузері (Chromes працює добре). Експортуйте його як закодований Base-64 X.509 (.CER)
- Замініть нові рядки на
\n
- Відредагуйте
.npmrc
додавання рядкаca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Випуски
Я помітив, що іноді npm висить, тому я зупиняю (іноді насильно) cntlm і перезавантажую його.