12 полезных советов и приемов NPM для более продуктивного программирования на JavaScript.

NPM, диспетчер пакетов узлов, представляет собой диспетчер пакетов для языка программирования JavaScript. Любой разработчик, работающий с Javascript, использовал этот замечательный инструмент CLI для установки зависимостей для своего проекта.

В этой статье я поделюсь советами и приемами NPM, которые помогут повысить вашу продуктивность и позволят использовать NPM более разумно и эффективно.

1. Инициализируйте свой пакет.

мы можем запустить команду npm init для инициализации нашего пакета, но она запросит информацию о пакете, авторе и т. д. Есть еще один способ автоматически сгенерировать наш package.json с помощью команды npm init -y.

npm init -y

Мы также можем установить конфигурацию инициализации по умолчанию, такую ​​как данные об авторе и т. Д. Давайте настроим с помощью команды npm config.

npm config set init-author-name "Ankit Jain"
npm config set init-author-email "[email protected]"

Давайте запустим npm init -y, чтобы автоматически сгенерировать наш пакет -

{
  "name": "<name of the root dir>",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "Ankit Jain <[email protected]>",
  "license": "ISC"
}

Мы также можем расширить функциональность npm init, добавив наш собственный файл javascript и снова настроив его, используя npm config -

npm config set init-module <path-of-the-custom-file>

2. Установите пакет из других источников.

NPM CLI также позволяет устанавливать пакеты javascript из других источников, таких как Bit, tarball-файл, репозиторий GitHub, Bitbucket и gist.

# Install a component from Bit (set Bit as a scoped registry)
npm config set @bit:registry https://node.bit.dev
npm i @bit/username.collection.component
# Install from tarball stored locally
npm i ./local-tarball-package.tgz

# Install tarball package from internet
npm i https://abc/xyz/package.tar.gz

# Install from github repo
npm i githubuser/reponame

# Install from bitbucket repo
npm i bitbucket:bitbucketuser/reponame

# Install from gist
npm i gist:gistID

Пример: установить компонент Button из Bit

Допустим, я ищу компонент Button, который один из моих товарищей по команде опубликовал в нашей коллекции компонентов на Bit.

Я начну с настройки Bit в качестве реестра с ограниченным объемом:

npm config set @bit:registry https://node.bit.dev

Затем я перейду в коллекцию моей команды и найду кнопку:

Я перейду на страницу компонента «Кнопка» и скопирую команду для установки с помощью NPM:

npm i @bit/the_a-team.imperfect-components.button

Название моей команды: «Команда А». Название нашей коллекции: «Несовершенные компоненты».

3. Чистая установка зависимостей вашего пакета.

мы можем запустить npm ci для чистой установки зависимостей наших пакетов. Обычно он используется в автоматизированных средах, таких как платформы CI / CD.

npm ci

Он отличается от установки npm следующим образом:

  • Он устанавливает точную версию пакета, указанную в файле package-lock.json.
  • Удаляет существующие node_modules и запускает новую установку.
  • Он не будет записывать в package.json или файл блокировки.
  • Он не устанавливает отдельные пакеты, подобные npm install.

4. Используйте ярлыки для установки пакетов.

Это самая полезная функция, которую мы можем использовать для экономии времени при установке пакетов -

# Install package
npm install <package_name>
Shortcut: npm i <package_name>
# Install devDependencies
npm install --save-dev <package_name>
Shortcut: npm i -D <package_name>
# Install dependencies (This is default)
npm install --save-prod <package_name>
Shortcut: npm i -P <package_name>
# Install packages globally
npm install --global <package_name>
Shortcut: npm i -g <package_name>

Установить несколько пакетов одной командой -

npm i express cheerio axios

Установите несколько пакетов с одинаковым префиксом -

npm i eslint-{plugin-import,plugin-react,loader} express

5. Скрипты NPM

Скрипты NPM - самая полезная функция. Он поддерживает настраиваемые сценарии, кроме предопределенных предварительных / пост-хуков (обычно называемых сценариями жизненного цикла), например:

  • preinstall - который запускается перед установкой любого пакета.

npm run env перечисляет все переменные среды npm, присутствующие в нашем пакете. Он также содержит свойства пакета с префиксом npm_package_.

npm run env

Выход будет -

npm_config_save_dev=
npm_config_legacy_bundling=
npm_config_dry_run=
npm_config_viewer=man
.
.
npm_package_license=ISC                # Package properties
npm_package_author_name=Ankit Jain
npm_package_name=npm-tips-and-tricks   # Name of our package
.
.

Мы также можем получить доступ к указанным выше переменным env в нашем коде с помощью process.env.npm_package_name и аналогичных других переменных.

Настроить собственные переменные в package.json

Мы можем передать наши собственные переменные как переменные среды npm с префиксом npm_package_config_, определив их в файле package.json в объекте config. Давайте определим переменную myvariable в нашем файле package.json.

"config": {
    "myvariable": "Hello World"
},

Теперь давайте проверим это в переменной env -

npm run env | grep npm_package_config_

Мы можем увидеть что-то вроде этого -

npm_package_config_myvariable=Hello World

Определите наши собственные сценарии

Команда npm run показывает все сценарии, которые мы определили в нашем package.json файле. Давайте добавим несколько пользовательских скриптов в наш package.json -

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node index.js",
    "echo-hello": "echo \"Hello\"",
    "echo-helloworld": "echo \"Helloworld\"",
    "echo-both": "npm run echo-hello && npm run echo-helloworld",
    "echo-both-in-parallel": "npm run echo-hello & npm run echo-helloworld",
    "echo-packagename": "echo $npm_package_name",
    "echo-myvariable": "echo $npm_package_config_myvariable",
    "echo-passargument": "npm run echo-packagename -- \"hello\"",
    "echo-pipedata": "cat ./package.json | jq .name > package-name.txt"
},

Теперь мы можем увидеть все команды, добавленные выше, выполнив эту команду -

npm run

Выход будет -

# npm-tips-and-tricks (name of our package)
Lifecycle scripts included in npm-tips-and-tricks:
  test
    echo "Error: no test specified" && exit 1
  start
    node index.js
available via `npm run-script`:
  echo-hello
    echo "Hello"
  echo-helloworld
    echo "Helloworld"
  echo-both
    npm run echo-hello && npm run echo-helloworld
  echo-both-in-parallel
    npm run echo-hello & npm run echo-helloworld
  echo-packagename
    echo $npm_package_name
  echo-myvariable
    echo $npm_package_config_myvariable
  echo-passargument
    npm run echo-packagename -- "hello"
  echo-pipedata
    cat ./package.json | jq .name > package-name.txt

Запустите простой скрипт npm -

npm run echo-hello
# Output
> echo "Hello"
Hello

Запуск нескольких сценариев в одном сценарии npm -

Мы можем запускать несколько скриптов, используя «&&». Оба сценария запускаются последовательно, то есть один за другим.

npm run echo-both
# Output
> npm run echo-hello && npm run echo-helloworld
> [email protected] echo-hello 
> echo "Hello"
Hello
> [email protected] echo-helloworld
> echo "Helloworld"
Helloworld

Мы также можем запускать несколько скриптов параллельно, используя «.

npm run echo-both-in-parallel
# Output
> npm run echo-hello & npm run echo-helloworld
> [email protected] echo-hello
> echo "Hello"
> [email protected] echo-helloworld
> echo "Helloworld"
Hello
Helloworld

Используйте переменную среды npm в сценарии npm -

npm run echo-packagename
# Output
> echo $npm_package_name
npm-tips-and-tricks
-------------
npm run echo-myvariable
# Output
> echo $npm_package_config_myvariable
Hello World

Передача аргументов в другой сценарий npm -

Мы можем использовать «-» для передачи аргументов скрипту npm. В приведенном ниже примере мы передаем «hello» в качестве аргумента echo-packagename скрипту.

npm run echo-passargument
# Output
> npm run echo-packagename -- "hello"
> [email protected] echo-packagename
> echo $npm_package_name "hello"
npm-tips-and-tricks hello

Используйте канал для передачи данных из одного сценария npm в другой -

npm run echo-pipedata
# Output
> cat ./package.json | jq .name > package-name.txt
# Let's cat package-name.txt
cat package-name.txt
# Output
"npm-tips-and-tricks"

6. Быстро переходите к документации пакета.

Мы можем быстро перейти к документации любого пакета npm, просто выполнив эту команду -

npm docs <package-name>
OR
npm home <package-name>

Если мы хотим проверить наличие открытых проблем или зарегистрировать любую ошибку в пакете npm, мы также можем перейти на веб-сайт, выполнив эту команду -

npm bug <package-name>

Аналогичным образом npm repo <package-name> открывает в браузере страницу репозитория GitHub.

7. Удаляет повторяющиеся пакеты.

Мы можем удалить повторяющиеся зависимости, выполнив команду npm dedupe. Он упрощает общую структуру, удаляя повторяющиеся пакеты и эффективно разделяя общую зависимость между несколькими зависимыми пакетами. В результате получается плоское и дедуплицированное дерево.

npm dedupe or npm ddp

8. Просканируйте свое приложение на наличие уязвимостей.

мы можем запустить команду npm audit, чтобы просканировать наш проект на наличие уязвимостей в любой зависимости. Он прекрасно генерирует вывод в формате таблицы (мы также можем получить вывод в JSON), а также отображать, при этом другие пакеты зависят от этого пакета, если это многоуровневая / многозависимая зависимость.

npm audit fix автоматически устанавливает исправленные версии (если они доступны) всех уязвимых пакетов.

npm audit fix

9. Проверьте нашу среду

Мы можем использовать команду npm doctor для выполнения нескольких проверок в нашей среде, например, имеет ли наш npm CLI достаточные разрешения для установки пакетов javascript и может ли он подключаться к реестру npm. Он также проверяет версии node и npm, проверяет кеш на наличие поврежденных пакетов.

npm doctor

10. Протестируйте свои пакеты локально.

NPM предоставляет команду npm link, чтобы мы могли работать и тестировать наш пакет итеративно. Ссылка NPM создает символическую ссылку на наши тестовые пакеты в глобальной папке модулей npm, и мы можем установить этот пакет в наше тестовое приложение, просто запустив npm link <package_name>, который создаст символическую ссылку из глобально установленного пакета в наш корневой каталог node_modules. Это очень полезно при тестировании наших локальных пакетов или использовании наших собственных локальных пакетов npm.

cd /test-package (package name is helloworld)
npm link                     # Global symlink created
cd /application
npm link helloworld         # Create symlink in node_modules 

11. Проверьте устаревшие пакеты.

Мы можем использовать команду npm outdated, чтобы проверить все устаревшие пакеты npm. Он также показывает последнюю версию, которая должна быть установлена ​​для любого устаревшего пакета.

npm outdated --long or npm outdated -l

Мы также можем проверить наличие последней версии для любого пакета npm, просто выполнив эту команду -

# Shows the package information
npm view <package-name> or npm v <package-name>
# Shows the latest version only
npm v <package-name> version
# Shows the list of all versions
npm v <package-name> versions

12. Вывести список всех установленных пакетов.

Мы можем вывести список всех пакетов npm, установленных в нашем проекте, просто выполнив команду npm list. Он создаст древовидную структуру, показывающую установленный пакет и его зависимости.

npm list or npm ls 

Мы можем использовать флаг --depth, чтобы ограничить глубину поиска

npm ls --depth=1

Заключение

В этой статье мы узнали о некоторых полезных советах и ​​приемах NPM, которые можно использовать для повышения производительности. Таких хитростей / советов может быть еще много. Я тоже хотел бы услышать о них в разделе комментариев. Это может помочь другим разработчикам.

Не стесняйтесь комментировать и спрашивать меня о чем угодно. Вы можете подписаться на меня в Twitter и Medium. Спасибо за прочтение! 👍

Учить больше