Интересный факт
npm- это не аббревиатура, но обычно его называютnode package manager.
npm - это двоичный файл, который поставляется с nodejs по умолчанию и используется для управления JavaScript / TypeScript пакетами.
- Пакеты NPM размещаются (и устанавливаются с) https://www.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.
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 в случае ошибки) как часть вашего процесса публикации, чтобы обеспечить актуальность проектов.
Вы можете создать базовый скрипт с ограниченным набором параметров командной строки, например: вот сценарий, который запускает 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 🌹.
Если вам нужен приватный пакет для вашей компании / команды / предприятия, вам необходимо подписаться на платный план, подробности здесь: https://www.npmjs.com/pricing
Конечно, вам нужна учетная запись с соответствующими разрешениями для установки приватного пакета.