Полезные советы по npm, о которых вы могли не знать

Node.js JavaScript NPM
Полезные советы по npm, о которых вы могли не знать

автор:LeanCloud weakish

Поделитесь некоторыми практическими советами по инструментам управления пакетами npm, надеясь немного улучшить качество жизни разработчиков интерфейсов и Node.js.

Большинство разработчиков интерфейса и Node.js неотделимы от npm в своей повседневной работе.Как вы относитесь к npm? Если вы считаете, что npm великолепен, то вы можете прочитать эту статью, возможно, есть несколько советов, которые вы не замечали раньше, которые могут сделать ваш npm более удобным. Если вы считаете, что npm — это плохо, вы также можете прочитать эту статью, возможно, вы обнаружите, что с некоторыми хитростями npm станет немного менее плохим.

宇宙中已知最重的物质 node_modules

npm ci

Не обманывайтесь его названием.npm ciНе только для систем непрерывной интеграции, в повседневной разработке,npm ciОчень практично. а такжеnpm installразные,npm ciсогласно сpackage-lock.jsonУстановите зависимости, которые могут гарантировать, что вся команда разработчиков использует зависимости с одной и той же версией, и не тратить время на устранение различных странных проблем, вызванных несогласованными зависимостями. Не только это,npm ciСуществует также приятный побочный эффект ускорения установки модуля узла. потому чтоnpm ciнепосредственно на основеpackage-lock.jsonПри установке версии, указанной в , нет необходимости вычислять и решать проблему удовлетворения зависимостей, что в большинстве случаев может значительно ускорить процесс установки модуля узла. Если вы когда-либо подозревалиnpm installЕсли это слишком медленно, и вы используете менее совместимый yarn и менее совместимый pnpm, вы можете попробоватьnpm ci, возможно, вы обнаружите, что на самом деле npm также может быть менее медленным.

Кроме того, еслиpackage-lock.jsonустаревшее (иpackage.jsonконфликт), тоnpm ciОчень важно сообщать об ошибках, чтобы предотвратить устаревание зависимостей проекта.

имеютnpm ci, в основном я использую его только при введении новых зависимостейnpm install.

Уведомление,npm ciСуществующие автоматически очищаются перед установкойnode_modules,такnpm ciЕстественно, таких проблем, как несогласованность, которая может быть вызвана инкрементальной установкой, можно избежать. (Это также означает, что вы можете запомнить на одну команду меньшеnpm prune. ), хотя, если у вас медленная сеть, это может быть не так уж здорово. Не паникуйте, вы можете использовать--prefer-offline, чтобы максимально использовать глобальный кеш npm для ускорения процесса установки.

Конечно, с момента использованияnpm ci, то не забудьте поставитьpackage-lock.jsonПрисоединяйтесь к репозиторию git.

npm outdated

npm ciна основеpackage-lock.jsonЗаблокируйте версию зависимостей, чтобы обеспечить согласованность среды разработки проекта. Но это не означает, что версия зависимости заблокирована. Чтобы воспользоваться исправлениями ошибок, новыми функциями и улучшениями производительности, внесенными новой версией, необходимо регулярно обновлять зависимые версии. В этом случае рекомендуется использоватьnpm outdated. В нем будут перечислены зависимости проекта, которые не были обновлены до текущей последней версии. Красный цвет означает, что он соответствует указанному семантическому диапазону версий и теоретически может быть обновлен без мозгов (npm updateобновит все красные зависимости сразу). Желтый цвет указывает на то, что он не соответствует указанному семантическому диапазону версий, например обновлениям основных версий, что может привести к проблемам совместимости.

npm outdated 截屏

Некоторые проекты находятся в фазе сопровождения и не планируют добавлять новые функции, и, может быть, даже менее серьезные проблемы исправлять не планируется, но серьезные проблемы, такие как уязвимости в системе безопасности, все еще нуждаются в управлении. В это время вы можете использоватьnpm auditКоманда для вывода списка версий зависимостей проекта с уязвимостями безопасности. Проекты, которые находятся в активной разработке, также должны быть обеспокоены уязвимостями безопасности, но посколькуnpm installАвтоматически запускать при появлении новых зависимостейnpm audit, plus будет запускаться периодическиnpm outdated, поэтому запустите вручнуюnpm auditВозможностей не много.

npx

Как упоминалось ранее, он в основном используется только при введении новых зависимостей.npm install, нет упоминания о глобальной установке. Глобальная установка, конечно, также должна использоватьnpm install. Однако, чтобы обеспечить согласованность в среде разработки,npm install --globalСледует использовать с осторожностью. Лично рекомендуется использовать глобальную установку только при установке некоторых повседневных инструментов, а инструменты, необходимые для разработки проекта, устанавливаются как зависимости разработки, а затем использоватьnpxпередача.

Не рекомендуется:

npm install --global webpack
webpack ...

рекомендовать:

npm i -D webpack
npx webpack ...

здесьi -Dдаinstall --save-devкраткая форма .

Для некоторых разовых временных задач можно запускать соответствующие инструменты напрямую через npx, избавляя от хлопот ручной установки и загрязненияdevDependencies.

Например, предыдущий проект был запакован с помощью webpack, а теперь я хочу временно попробовать эффект от перехода на накопительную упаковку:

npx rollup ...

npx достаточно умен, чтобы автоматически установить накопительный пакет, если он не найден в пути.

npx очень полезен для проверки совместимости разных версий. Ниже приведены некоторые примеры.

нужныйcowsayФункция или исправление, которые были объединены в основную ветку GitHub, но еще не выпущены для npmjs, попробуйте:

npx github:piuccio/cowsay

Временный тест для внутреннего обслуживанияcowsayветка:

npx git+ssh://my.hosted.git:cowsay.git#semver:^1

В настоящее время, используя версию узла LTS (10), я хочу попытаться создать узел сценария под 12, который может работать:

npx -p node@12 npm run build

Из приведенного выше видно, что когда имя пакета и имя команды различаются (npmкомандаnodeпри условии), вы можете использовать-poption указывает имя пакета.

npm run

существуетpackage.jsonизscriptsДобавьте команды к свойствам (например:"foo": "echo foo") можно пройтиnpm run fooЗапустите соответствующую команду. Это очень удобный механизм запуска задач автоматизации, связанных с проектом, предоставляемый npm, который похож наmake. Но запустить его напрямуюmake(без каких-либо аргументов) запустит задачу по умолчанию, но напрямуюnpm run(без каких-либо аргументов) перечислит всеscriptsкоманда объявлена ​​в .

; npm run
Lifecycle scripts included in leancloud-realtime:
  test
    npm run lint && npm run build && npm run docs && npm run test:node && npm run test:browser

available via `npm run-script`:
  precommit
    pretty-quick --staged
  commitmsg
    commitlint -e $GIT_PARAMS
  lint
    eslint --ignore-path .gitignore src test plugins && tsc realtime.d.ts --strict
  ...

разное

Вот еще несколько советов, которые я лично не нахожу особенно полезными, но потребности и предпочтения у всех разные, и вы можете найти их полезными. Если у вас есть какие-либо советы, которыми вы хотите поделиться, пожалуйста, оставьте комментарий.

  • npm init -yпо умолчанию,npm initпозволит вам ответить на некоторые вопросы.npm init -yВы можете пропустить эти вопросы и начать разработку напрямую. Причина, по которой я не рекомендую это, заключается в том, что если вы собираетесь начать разработку приложения как можно скорее, вы будете использовать фреймворк в большинстве случаев, и почти все фреймворки имеют по крайней мере один на npmjscreate-xxx-appМешок. Так что в основном у вас нет возможности печататьnpm initчтобы ответить на эти вопросы. И если вы собираетесь писать компонент или библиотеку, тоpackage.jsonМетаинформация в компоненте или библиотеке важна для пользователя компонента или библиотеки (даже если это компонент или библиотека для вашего собственного использования, в будущем вы можете не вспомнить контекст, в котором был написан компонент или библиотека) , не рекомендуется пропускать эти вопросы. Конечно, нетерпение — одно из трех достоинств программиста, и вы можете подумать, что я могу исправить это после того, как закончу разработку. Но, вообще говоря, проекты часто начинаются тогда, когда вы больше всего заинтересованы (или чуть менее противны) в документировании этих контекстов. Если вам не терпится сделать это в начале проекта, после завершения разработки, скорее всего, это будет еще менее интересно. Точно так же README также должен быть написан до начала проекта.
  • npm repoМожет открыть репозиторий исходного кода проекта (в большинстве случаев GitHub), у него также есть родственная команда,npm homeчтобы открыть домашнюю страницу проекта. Однако я лично считаю, что Intellisense IDE или редактора (тип просмотра, просмотр документа, определение просмотра и т. д.), как правило, более эффективны, чем эти две команды.
  • .npmignoreФайлы могут содержать список файлов, которые вы не хотите упаковывать, и не публиковать некоторые нерелевантные файлы в npmjs. Однако унифицированное использование.gitignoreОн может удовлетворить потребности большинства сценариев. Более того, есть только.gitignoreна случай, если,npm publishбудет уважать.gitignoreзаявление, в то время как.npmignoreа также.gitignoreВ присутствии обоих,npm publishбудет игнорировать.gitignore, а не принимать союз двух. Другими словами,.gitignoreигнорировать, но.npmignoreФайлы, которые не игнорируются, будут упакованы и опубликованы. Итак, используйте.npmginoreЭто означает одновременное ведение двух списков, которые в основном дублируются. В то же время, как только кто-либо из членов команды по случайной небрежности или незнакомому.npmignoreа также.gitignoreЕсли детали отношения неверны, можно опубликовать конфиденциальную информацию в npmjs, что приведет к инциденту безопасности.
  • Сокращенные версии различных команд npm, например, использованные выше.npm i -D. Эти люди считают, что им не нужно специально запоминать их. часто вводимые команды, вы можетеnpm helpПосмотрите, есть ли короткая версия. Неважно, если вы не проверите.npm tа такжеnpm testи дажеnpm run testРазница ни в коем случае не является узким местом эффективности разработки. Во многих случаях это просто вопрос личных предпочтений, например, людям, которые хотят как можно меньше печатать, понравитсяnpm t, понравится людям, стремящимся запомнить как можно меньшеnpm run test(Никогда по ошибкеnpm buildвыражатьnpm run buildпри возникновении проблем), другим может понравитьсяnpm testТакой умеренный вариант.
  • npm xmasУгадайте, что вы получите, когда наберете эту команду? Вы можете попробовать сами. Подсказка: эта команда совершенно бесполезна. ;-)