Гайд по Node.js · 1 мин чтения

npm и yarn за прокси

Корпоративные сети ломают npm install довольно предсказуемо. Показываем, как настроить npm и обе основные версии yarn на установку через HTTP-прокси, плюс переменные окружения, общие для всего инструментария Node.

npm, yarn и HTTP-прокси

Пакетные менеджеры качают через HTTPS, поэтому им нужен HTTP-прокси с поддержкой CONNECT — а это ровно то, чем является HTTP-эндпоинт s4m на порту 3128. npm держит собственный конфиг, поэтому переменных окружения в шелле не всегда достаточно: обычно в конфиге npm выставляют сразу proxy и https-proxy, чтобы трафик к реестру пошёл куда надо. Два поколения yarn различаются: классический yarn v1 читает собственные настройки proxy / https-proxy (и по большей части уважает npm-овские), а Yarn Berry (v2+) использует ключи httpProxy и httpsProxy в .yarnrc.yml.

Все они точно так же уважают стандартные переменные окружения http_proxy, https_proxy и no_proxy — это самый быстрый способ протолкнуть разовый npm install на закрытой машине. В s4m вы аутентифицируетесь парой USER:PASS на proxy.s4m.online:3128. Смотрите страницу прокси и общее руководство по переменным окружения; соседнее руководство по pip и conda покрывает тот же сюжет для Python.

Настройка npm, yarn v1 и Berry

Постоянный конфиг для каждого инструмента плюс запасной вариант через переменные окружения. Подставьте свои USER:PASS перед запуском.

bash
# --- npm: persistent config (writes to ~/.npmrc) ---
npm config set proxy       http://USER:[email protected]:3128
npm config set https-proxy http://USER:[email protected]:3128
npm config set noproxy     localhost,127.0.0.1,.internal
npm install
# To undo later:
# npm config delete proxy && npm config delete https-proxy

# --- yarn v1 (classic) ---
yarn config set proxy       http://USER:[email protected]:3128
yarn config set https-proxy http://USER:[email protected]:3128

# --- Yarn Berry (v2+): .yarnrc.yml ---
cat >> .yarnrc.yml <<'YML'
httpProxy: "http://USER:[email protected]:3128"
httpsProxy: "http://USER:[email protected]:3128"
YML

# --- Environment variables: quickest one-off fix ---
export https_proxy="http://USER:[email protected]:3128"
export http_proxy="http://USER:[email protected]:3128"
export no_proxy="localhost,127.0.0.1,.internal"
npm install

Починить npm install за прокси

В каком порядке действовать, когда установка отваливается по таймауту.

Убедитесь, что дело в прокси

Запустите npm install -ddd (или с --verbose) и поищите ETIMEDOUT или ECONNREFUSED к реестру — это указывает на заблокированное исходящее соединение, которому нужен прокси.

Выставьте npm proxy и https-proxy

Через npm config set задайте и proxy, и https-proxy на http://USER:[email protected]:3128. Трафик к реестру идёт по HTTPS, поэтому обычно решающий именно https-proxy.

Учтите версию yarn

Для yarn v1 — yarn config set; для Yarn Berry добавьте httpProxy и httpsProxy в .yarnrc.yml. Смешивать два стиля конфига не стоит.

Добавьте noproxy для внутренних реестров

Если у вас есть ещё и частный реестр в локальной сети, добавьте его хост в noproxy / no_proxy, чтобы к нему ходили напрямую, а не через внешний прокси.

Авторизация, частные реестры и грабли

Две вещи ломают установку даже после того, как прокси прописан. Первая — спецсимволы в пароле: если в нём есть @, : или #, закодируйте их в URL-формате (например, @ становится %40), иначе конфиг разберёт URL неправильно. Вторая — смесь публичного и частного реестров: добавьте хост внутреннего реестра в noproxy, чтобы к нему ходили напрямую, тогда как публичный реестр npm идёт через прокси.

HTTP-эндпоинт s4m — аутентифицированный дата-центровый прокси с оплатой за потраченное: ровно то, что нужно CI-раннерам и машинам разработчиков, которым надо добраться до npm из-под контролируемого выхода в сеть. Это не резидентский прокси и не кеш пакетов; для установки без интернета поднимайте настоящее зеркало реестра. Когда вашему CI нужен один исходящий IP для белого списка, добавьте выделенный персональный IP. 407 означает неверные учётные данные — смотрите руководство по 407. Тот же эндпоинт обслуживает pip/conda и Docker; проверить его можно инструментами.

FAQ

Ответы на вопросы

Почему npm install зависает или отваливается по таймауту за прокси?

К реестру ходят по HTTPS, а ваше исходящее соединение заблокировано. Выставьте в npm proxy и https-proxy (и/или переменные окружения http_proxy/https_proxy) на http://USER:[email protected]:3128.

Как настроить Yarn Berry и чем это отличается от yarn v1?

yarn v1 использует yarn config set proxy / https-proxy. Yarn Berry (v2+) — ключи httpProxy и httpsProxy в .yarnrc.yml. Держитесь одного стиля на проект, не смешивайте их.

В пароле спецсимволы, и прокси не работает — почему?

npm разбирает значение прокси как URL, поэтому символы вроде @, : или # в пароле должны быть закодированы в URL-формате (например, @ становится %40). После кодирования учётные данные разбираются правильно.

Как оставить внутренний реестр вне прокси?

Добавьте имя хоста внутреннего реестра в список noproxy (npm) или no_proxy (переменная окружения). Тогда к этому хосту ходят напрямую, а трафик к публичному реестру по-прежнему идёт через прокси.

Разблокируйте установку пакетов Node

Пустите npm и yarn через аутентифицированный HTTP-эндпоинт на proxy.s4m.online:3128. Оплата за потраченное, а когда CI нужен один адрес для белого списка — выделенный IP.

Эту страницу нашли по запросу

Реальные поисковые фразы, на которые отвечает эта страница — по ссылкам откроются материалы, раскрывающие тему глубже.