автор:JowayYoung
склад:Github,CodePen
Блог:Официальный сайт,Наггетс,думаю нет,Знай почти
Нет публики:Интерфейс IQ
Специальное заявление: Нелегко быть оригинальным, и перепечатка или плагиат не допускаются без разрешения.Если вам нужно перепечатать, вы можете связаться с автором для получения разрешения.
предисловие
Из-за внутренней сетевой среды реализацияnpm i
В процессе установки зависимостей проекта вы обязательно столкнетесь安装过慢
или安装失败
Случай. Обычно опытные студентыNodeКстатизеркало нпмУстановите внутреннее зеркало Taobao.
npm config set registry https://registry.npm.taobao.org/
Это позволит справиться с большинствомnpm i
установки. Конечно, это решает только большую часть安装过慢
или安装失败
При углубленной разработке проекта обязательно будут какие-то странные ситуации, поэтому автор и написал эту статью.
Управление изображениями
Вы также можете столкнуться с такой ситуацией, при разработке проекта используйте淘宝镜像
, но публикуетсторонние модули npmнеобходимо использовать, когда原镜像
. Прежде чем приступить к решению этих странных ситуаций, рекомендуется использоватьИнструмент управления образами NPM.
-
исходное изображение:
https://registry.npmjs.org/
-
зеркало таобао:
https://registry.npm.taobao.org/
Главный геройnrm
, это бесплатный переключатель в любое время и в любом местезеркало нпминструменты управления. С его помощью решается упомянутая выше проблема, когда какое зеркало использовать. Далее следует установить его и кратко объяснить, как его использовать.
Установить
npm i -g nrm
Посмотреть зеркало
nrm ls
Добавить зеркало
nrm add <name> <url>
удалить изображение
nrm del <name>
тестовое изображение
nrm test <name>
использовать зеркало
nrm use <name>
Посмотреть текущее зеркало
nrm current
После ознакомления с командой следующая волна операций выглядит следующим образом,原镜像
а также淘宝镜像
Переключайтесь между ними по желанию. Конечно, если у вас хорошая память, вам не нужно использовать этот инструмент, ха-ха.
Засыпать яму
имеютnrm
При переходе на зеркало Taobao скорость установки будет значительно выше, но устанавливаемые модули зависят отC++模块
Это отстой. Неявно устанавливается во время установкиnode-gyp
,node-gyp
скомпилировать эти зависимостиC++模块
модуль.
Итак, возникает вопрос,node-gyp
Зависит от первой компиляцииNode源码
, так спокойно иди скачивайNode
. Хотя ранее ставил淘宝镜像
, но здесь бесполезно. Таким образом, из-за внутренней сетевой среды я снова столкнулся с этим.安装过慢
или安装失败
Случай.
отличноnpm config
предоставил параметрdisturl
, он может установить адрес зеркала узла и, конечно же, указать его на домашнее зеркало Taobao. Таким образом, эти зависимости могут быть легко установленыC++模块
модуль.
npm config set disturl https://npm.taobao.org/mirrors/node/
Проблема решается шаг за шагом, а затем возникает другая проблема. Обычно все используютnode-sass
как зависимость развития проекта, ноnode-sass
установка всегда была головной болью.
Установитьnode-sass
когда, вinstall阶段
загрузит файл с Github под названиемbinding.node
файл, покаGitHub Releasesфайлы размещены вs3.amazonaws.com
Включен, этот URL-адрес был Q, поэтому его нельзя установить снова.
Однако путей больше, чем трудностей, отnode-sass
Один из них можно найти в официальной документацииsass_binary_site
параметр, он может установить адрес зеркала Sass и, несомненно, указать его на домашнее зеркало Taobao. Это облегчит установкуnode-sass
.
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
На самом деле подобных модулей несколько, для удобства я их все же поместил в исходники.镜像参数
Соответствует зеркалу Taobao镜像地址
Подобрали, унифицированные настройки просты в установке. Ниже приведены конфигурации зеркальных адресов нескольких модулей, обычно используемых автором, пожалуйста, примите их!
Они есть:Sass
,Sharp
,Electron
,Puppeteer
,Phantom
,Sentry
,Sqlite
,Python
.
Конфигурация зеркального адреса
npm config set <name> <url>
, торопитьсяКопия в один клик, постоянное использование. Будьте особенно внимательны, не пропустите последний/
.
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
npm config set sharp_dist_base_url https://npm.taobao.org/mirrors/sharp-libvips/
npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
npm config set puppeteer_download_host https://npm.taobao.org/mirrors/
npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/
npm config set sentrycli_cdnurl https://npm.taobao.org/mirrors/sentry-cli/
npm config set sqlite3_binary_site https://npm.taobao.org/mirrors/sqlite3/
npm config set python_mirror https://npm.taobao.org/mirrors/python/
С помощью этой волны операций выполнитеnpm i
При установке вышеуказанных модулей вы сможете наслаждаться отечественной скоростью. Если позволяют условия, рекомендуется переместить эти файлы изображений на свой сервер или сервер компании,镜像地址
Просто укажите на свой сервер. Построить такой зеркальный сервер в интранете компании, а он все время установлен.Это то, чем сейчас занимается команда, где автор.
npm config set electron_mirror https://xyz/mirrors/electron/
Анализ исходного кода
часто застреваетnode-sass
Например, следующие товары являются мошенническимиnode-sass/lib/extensions.js
изисходный код, видно что пойдет по умолчаниюGitHub ReleasesАдрес хостинга , причины также были проанализированы выше и здесь повторяться не будут.
function getBinaryUrl() {
const site = getArgument("--sass-binary-site")
|| process.env.SASS_BINARY_SITE
|| process.env.npm_config_sass_binary_site
|| (pkg.nodeSassConfig && pkg.nodeSassConfig.binarySite)
|| "https://github.com/sass/node-sass/releases/download";
const result = [site, "v" + pkg.version, getBinaryName()].join("/");
return result;
}
И другие модули имеют аналогичный код, например.puppeteer
эта установкаChronium
изисходный код, Заинтересованные студенты перейдут к исходному коду, там же.
async function download() {
await compileTypeScriptIfRequired();
const downloadHost =
process.env.PUPPETEER_DOWNLOAD_HOST
|| process.env.npm_config_puppeteer_download_host
|| process.env.npm_package_config_puppeteer_download_host;
const puppeteer = require("./index");
const product =
process.env.PUPPETEER_PRODUCT
|| process.env.npm_config_puppeteer_product
|| process.env.npm_package_config_puppeteer_product
|| "chrome";
const browserFetcher = puppeteer.createBrowserFetcher({
product,
host: downloadHost,
});
const revision = await getRevision();
await fetchBinary(revision);
// 还有很多
}
Сводка по пит-товарам
из-заnode-sass
Это зависимость разработки проекта, которую все часто используют, а также модуль с длительным временем установки и наиболее распространенными сообщениями об ошибках.Здесь я потрачу несколько глав на анализ и решение проблем, с которыми можно столкнуться.
node-sass
Причины сбоя установки не ограничиваются вышеперечисленными ситуациями, мы можем проанализировать и получить прорывы из процесса установки для решения проблемы. согласно сnpm i node-sass
Для анализа выходной информации может быть получен следующий процесс.
- Тестовые задания
node_modules
изnode-sass
Существует ли он и совпадает ли текущая установленная версия- Yes: пропустить, завершить процесс установки
- No: перейти к следующему шагу
- отNPMскачать
node-sass
- обнаружить
全局缓存
или项目缓存
Будь тамbinding.node
- Yes: пропустить, завершить процесс установки
- No: перейти к следующему шагу
- отGithub Releasesскачать
binding.node
и кешировать его глобально-
Success: записать информацию о версии
package-lock.json
- Error: перейти к следующему шагу
-
Success: записать информацию о версии
- попробуй скомпилить локально
binding.node
-
Success: записать информацию о версии
package-lock.json
- Error: вывод сообщения об ошибке
-
Success: записать информацию о версии
не трудно увидеть,node-sass
зависит от бинарникаbinding.node
, не только изNPMскачать本体
также нужно отGithub Releasesскачатьbinding.node
.
Из реальной ситуации,node-sass
появляться安装过慢
или安装失败
Могут быть следующие ситуации:
Зеркала NPM размещены на внешних серверах.
Как было сказано выше, здесь это описывать не будем.Решение состоит в следующем.
nrm use taobao
Спокойно скачать во время установки
node-gyp
Как было сказано выше, здесь это описывать не будем.Решение состоит в следующем.
npm config set disturl https://npm.taobao.org/mirrors/node/
binding.node
Файлы размещены на иностранных серверах
Как было сказано выше, здесь это описывать не будем.Решение состоит в следующем.
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
Версия Node несовместима с версией node-sass.
node-sass
Совместимость версий очень плохая. Необходимо использовать в соответствии с версией Node. Подробную информацию см.node-sass-version-association, таблица сравнения версий повторного использования официальных документов выглядит следующим образом.
NodeJS | Minimum node-sass version | Node Module |
---|---|---|
Node 14 | 4.14+ | 83 |
Node 13 | 4.13+ | 79 |
Node 12 | 4.12+ | 72 |
Node 11 | 4.10+ | 67 |
Node 10 | 4.9+ | 64 |
Node 8 | 4.5.3+ | 57 |
воплощать в жизньnpm i
Перед установкой зависимостей убедитесь, что текущая версия Node иnode-sass
Версии совместимы.
Версия binding.node в глобальном кеше несовместима с версией Node.
если используется локальноnvm
илиn
Выполняется управление версией узла, и версия узла была переключена, что может появиться в процессе установки.Windows/OS X/Linux 64-bit with Node.js 12.x
Такая подсказка, такая ситуация тоже ситуация, с которой я часто сталкиваюсь (у меня на компьютере установлено более 30 версий Node и я часто переключаюсь туда-сюда 😂).
Это потому чтоnode-sass
Версия и версия Node связаны (см. таблицу выше), и после изменения версии Node соответствующая версия не может быть сопоставлена в глобальном кеше.binding.node
файл, вызывающий сбой установки. Согласно подсказке об ошибке, очистите кеш NPM и переустановите его.Решение заключается в следующем.
npm cache clean -f
npm rebuild node-sass
Так что, если вам нечего делать, не переключайте версии Node туда-сюда, например, мне нужно установить очень много версий Node, слишком много старых проектов.
Переустановите после неудачной установки
Возможно, у вас нет прав на удаление установленного контента, что может вызвать некоторые проблемы при переустановке.node_modules
Удали все и переустанови.
Удалить в системах Mac и Linuxnode_modules
Быстрее, но удаляет в системах Windowsnode_modules
Это относительно медленно, я рекомендую всем использоватьrimrafудалятьnode_modules
, версия узлаrm -rf
инструмент.
npm i -g rimraf
в проектеpackage.json
Присоединяйсяnpm scripts
Позволятьrimraf
постоянный. Три основные операционные системы широко распространены и настоятельно рекомендуются.
{
"scripts": {
"reinstall": "rimraf node_modules && npm i"
}
}
что安装失败
,重新安装
такие операции, какnpm run remove
удалятьnode_modules
Опять такиnpm i
.
npm run reinstall
Окончательное резюме
Если это выглядит немного запутанно, вставьте последовательность операций с кодом непосредственно ниже.Рекомендуется, чтобы внешний интерфейс Xiaobai занимался этими проблемами зеркалирования NPM сразу после установки Node, чтобы предотвратить ненужные проблемы в будущем (для решения этих проблем требуется время ).
# 查看Node版本和NPM版本确认已安装Node环境
node -v
npm -v
# 安装nrm并设置NPM的淘宝镜像
npm i -g nrm
nrm use taobao
# 设置依赖安装过程中内部模块下载Node的淘宝镜像
npm config set disturl https://npm.taobao.org/mirrors/node/
# 设置常用模块的淘宝镜像
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
npm config set sharp_dist_base_url https://npm.taobao.org/mirrors/sharp-libvips/
npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
npm config set puppeteer_download_host https://npm.taobao.org/mirrors/
npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/
npm config set sentrycli_cdnurl https://npm.taobao.org/mirrors/sentry-cli/
npm config set sqlite3_binary_site https://npm.taobao.org/mirrors/sqlite3/
npm config set python_mirror https://npm.taobao.org/mirrors/python/
противnode-sass
Случай:
# 安装rimraf并设置package.json
npm i -g rimraf
# 安装前请确保当前的Node版本和node-sass版本已兼容
# 安装失败
npm cache clean -f
npm rebuild node-sass 或 npm run reinstall
package.json
Присоединяйсяnpm scripts
:
{
"scripts": {
"reinstall": "rimraf node_modules && npm i"
}
}
Суммировать
Проблема с зеркалом NPMЯм действительно много, и в конечном счете это связано с сетевым окружением. Конечно, эти проблемы не могут остановить нас, желающих исследовать.Решений всегда больше, чем трудностей.Настойчивость всегда может найти решение.
Автор приходит к решению этойПроблема с зеркалом NPMЕсли вы столкнулись с некоторыми модулями, не упомянутыми выше, вы можете попытаться решить проблему, выполнив следующие действия.
- воплощать в жизнь
npm i
Перед настройкой зеркала Taobao убедитесь, что проект установки зависит от внутренней сети. - Если установка не удалась, в процессе установки внутри модуля должны быть загружены файлы с других внешних серверов.
- Клонируйте копию исходного кода модуля на Github для анализа и ищите
base、binary、cdn、config、dist、download、host、mirror、npm、site、url
такие ключевые слова (исследуйте самостоятельно, обычноmirrorсамый высокий матч) - Найти морфологические изображения в результатах поисказеркальный адресблок кода, затем проанализируйте функцию блока кода и извлеките окончательныйзеркальный адрес,Например
node-sass
изsass_binary_site
- Перейдите на официальный сайт зеркала Taobao, Baidu, Google и другие веб-сайты, чтобы найти нужный вам адрес зеркала.Если вы не можете его найти, стандартизируйте Интернет, чтобы извлечь файл зеркала чужого сервера и переместить его на свой собственный или корпоративный. сервер.
- Установите адрес зеркала, от которого зависит модуль:
npm config set <registry name> <taobao url / yourself url>
- сделай это снова
npm i
Установите зависимости проекта, все готово
Если это не поможет вам или решитьПроблема с зеркалом NPMЯ также столкнулся с другими ямами, пожалуйста, добавьте автора WeChat для совместного общения. Если есть ошибка, пожалуйста, укажите, и если есть лучшее решение, вы также можете внести предложения.
Кроме того, автор потратил некоторое время, используя Xmind, чтобы упорядочить содержание этой статьи и создать карту распределения точек знаний.Концентрация — это суть. Поскольку изображение слишком большое для загрузки, оно будет сохранено в общедоступном аккаунте. При необходимости вы можете подписаться на него.IQ前端
,сканирование文章底部二维码
, фоновый ответNPM镜像
Получите эту картинку, надеюсь, она вам поможет.
Эпилог
❤️Подписаться + Нравится + Избранное + Комментарий + Переслать ❤️, оригинальность это не просто, поощряйте автора к созданию более качественных статей
Обратите внимание на публичный аккаунтIQ前端
, внешний общедоступный аккаунт, ориентированный на навыки разработки CSS / JS, вас ждут другие галантереи переднего плана
- Ответить после подписки
资料
Получите бесплатные учебные материалы - Ответить после подписки
进群
Втяните вас в группу технического обмена - Добро пожаловать, чтобы следовать
IQ前端
,БолееНавыки разработки на CSS/JSНажимайте только на публичный аккаунт