Перейти к содержанию

NPM

Интересный факт npm - это не аббревиатура, но обычно его называют node package manager.

npm - это двоичный файл, который поставляется с nodejs по умолчанию и используется для управления JavaScript / TypeScript пакетами.

  • Пакеты NPM размещаются и устанавливаются с npmjs.com (☁️).

Быстрая стандартная настройка

  • Пакеты npm настраиваются с помощью файла package.json. Вы можете быстро сгенерировать файл, используя npm init -y.
  • Пакеты устанавливаются в ./node_modules папку. Обычно эта папка указана в вашем .gitignore.

Даже если вы, возможно, создаете приложение, наличие package.json по сути также делает ваш проект пакетом. Так что правила для вашего проекта | пакета одинаковы.

Когда вы проверяете чей-то (вашей команды) проект, в нем будет package.json, в котором будут перечислены зависимости, необходимые для запуска проекта. Вы просто запускаете npm install, и npm загружает их из облака ☁️.

Установка пакета

Вы можете запустить npm install <что-то>. Большинство людей будут использовать сокращение npm i <что-то>, например:

// Установить react
npm i react

Это также автоматически добавит react в поле dependencies вашего package.json.

Установка devDependency

devDependencies - это зависимости, которые требуются только во время разработки вашего проекта, и не требуются в публикации.

typescript распространен в devDependencies, поскольку он требуется только для сборки .ts -> .js. Обычно вы публикуете собранные файлы .js:

  • при публикации
  • ИЛИ для использования другими пакетами npm

Безопасность

Общедоступные пакеты npm тщательно проверяются командой безопасности по всему миру, и о проблемах сообщается команде npm. Затем они выпускают рекомендации по безопасности с подробным описанием проблемы и потенциальных исправлений. Обычно исправление заключается в простом обновлении пакета.

Вы можете запустить аудит своего проекта узла с помощью команды npm audit. Это укажет на любые уязвимости, которые могут существовать в пакете / зависимостях пакета. Например:

Low Regular Expression Denial of Service
Package debug
Dependency of jest [dev]
Path jest > jest-cli > istanbul-lib-source-maps > debug
More info https://nodesecurity.io/advisories/534

Обратите внимание, что обычно проблемы обнаруживаются в devDependency(например, jest в данном случае). Поскольку они не являются частью ваших финальных публикаций, скорее всего, ваше финальное приложение не подвержено уязвимостям. Но по-прежнему рекомендуется сохранять количество уязвимостей в размере 0.

Просто добавьте npm audit (команда имеет код ошибки 1 в случае ошибки) как часть вашего процесса публикации, чтобы обеспечить актуальность проектов.

Скрипты NPM

Что означает -- в скриптах

Вы можете создать базовый скрипт с ограниченным набором параметров командной строки, например: вот сценарий, который запускает tsc для компилятора TypeScript:

{
    "scripts": {
        "build": "tsc -p ."
    }
}

Вы можете создать скрипт build:watch для запуска tsc -p . -w или, альтернативно, попросить npm запустить сборку с дополнительным флагом -w, например:

{
    "scripts": {
        "build": "tsc -p .",
        "build:watch": "npm run build -- -w"
    }
}

Вы можете передать сколько угодно флагов после --, например в следующем примере build: more имеет тот же эффект, что и something --foo -f -d --bar

{
    "scripts": {
        "build": "something --foo",
        "build:more": "npm run build -- -f -d --bar"
    }
}

Публичные и приватные пакеты

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

Публичные пакеты

  • По умолчанию пакеты являются публичными.
  • Кто угодно может публиковать пакет в npm.
  • Вам просто нужна учетная запись для публикации (которую можно получить бесплатно).

Но никому не нужна учетная запись для установки общедоступного пакета.

Бесплатный обмен пакетами - одна из главных причин успеха npm 🌹.

Приватные пакеты

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

Конечно, вам нужна учетная запись с соответствующими разрешениями для установки приватного пакета.