Это секрет, о котором большинство из нас не знает. Как работает NPM.

Как только у меня появилась возможность объяснить, что такое Nodejs и структуру моего проекта группе стажеров, эти стажеры недавно закончили обучение или, возможно, учились на последнем курсе и не имели представления о Nodejs и о том, как он работает, это было очень просто. мне нужно объяснить, что такое Nodejs и как он работает, движок javascript во время выполнения, движок Chrome V8, бла-бла,

Затем я начал объяснять им структуру проекта, самая важная часть наступает, когда нам нужно запустить проект локально или на локальной машине.

Я начал объяснять им наш собственный файл package.json. мы все любим это, и мы все это знаем. Файл пакета JSON содержит описание проекта, его зависимость, зависимость от разработчиков и немного метаданных.

К счастью, этот файл также содержит несколько команд сценария о том, как мы запускаем наш проект, тестовые примеры в проекте, линтер, форматтер и т. д.

Итак, у нас есть объект сценария, и мы предоставляем, что именно нам нужно сделать, когда мы вводим команду npm run XXX, она переходит к файлу package.json, чтобы найти командный сценарий xxx, а затем выполняет следующая команда. Например, «lint»: «eslint . — cache — расположение кеша .cache/.eslintcache”,

Один из стажеров остроумно спросил меня, почему бы нам не запустить «eslint . — cache — cache-location .cache/.eslintcache»непосредственно, чем с помощью npm run lint,

Тогда я подумал, о, умно, я сказал, что легче запомнить и записать такую большую команду.

Но затем случайно я наткнулся на «eslint . — cache — cache-location .cache/.eslintcache” в моем терминале, и я увидел, что эта команда выдала мне ошибку.

У меня появилась еще одна возможность быть героем перед ними, я тогда твердо сказал, что если мы напрямую введем эту команду, то получим ошибку, так как в нашей операционной системе нет такой инструкции для запуска этой команды. Все улыбнулись и остались довольны моим ответом. Я был очень счастлив и собирался счастливо завершить сессию, у меня были запланированы встречи.

Но вдруг один из интернов задал мне еще один вопрос, который заставил меня задуматься о том, что оставшийся целый день он спросил:

Команда «eslint . — cache — cache-location .cache/.eslintcache” не находится в операционной системе, но когда мы запускаем npm run lint, он работает успешно, но не сообщает ошибка. который похож на «eslint . — cache — cache-location .cache/.eslintcache” команда.

Я спросил их, что я должен уйти на встречу и ответить им в ближайшее время в конце дня.

Всю встречу я пытался думать, почему ошибка npm run lint не выдает никаких ошибок, я пытался искать в Интернете, и мне удалось получить ответ на это,

Ответ,

сначала мы устанавливаем зависимости проекта, используя npm i xxx, когда npm установит эту зависимость, он создаст папку в node_
модулях
, каталог с его именем, он будет аналогичным образом создайте каталог node_modules/.bin/ в качестве имени нескольких исполняемых файлов.

Каталог .bin — это место, где хранятся все исполняемые файлы. Файлы в этом каталоге представляют собой программные ссылки. Когда вы откроете файл, вы увидите, что в верхней части файла написано #!/usr/bin/env node, что указывает на то, что это скрипт.

Поэтому при использовании npm run lintto выполнить «eslint . — cache — расположение кеша .cache/.eslintcache”, хотя файл “eslint . — cache — cache-location .cache/.eslintcache” глобальная команда не установлена, 'npm' найдет 'eslint' исполняемый файл в каталоге файлов ./node_modules/.bin и выполнить его как скрипт (эквивалентно выполнению ./node_modules/.bin/eslint')

в дополнение к этому я также объяснил им, как программные ссылки npm на эти файлы,

Я показал им файл package-lock.json, в котором под объектом bin

Поэтому, когда мы используем npm i для установки зависимостей, npm объявляет bin/eslint.js как bin.

После прочтения конфигурации npm мягко свяжет ее с каталогом ./node_modules/.bin, а npm автоматически добавит node_modules/.bin к $PATH, чтобы вы могли напрямую запускать зависимые программы в виде команды без необходимости глобальной установки.

Короче говоря, когда мы выполняем npm i, это уже помогло нам настроить мягкое соединение. По сути, это мягкое соединение является своего рода отображением. При выполнении npm run xxx он перейдет к node_modules/bin `Найти соответствующий файл сопоставления, а затем найти соответствующий файл js для выполнения кода.

Примечание: все приведенные выше примеры изображений я взял из Github NodeJs, вы можете проверить и изучить приведенные выше примеры.

А пока счастливого кодирования.