Перевод и небольшое творческое переосмысление доклада Ashley Williams(человека из команды разработчиков npm) с конференции JavaScript fwdays'17, которая прошла 22 апреля 2017 года в Киеве, Украина. Целью статьи я не ставил дословно перевести выступление Ashley, для вас будет представлена выжимка основных моментов, а именно – фишки npm, о которых не все знают, но знать о которых полезно каждому. В подвале я оставлю ссылку на страницу выступления на сайте frameworksdays.com, где вы сможете найти видео выступления, презентацию и контакты самой Ashley, если они вам понадобятся.
Если вы хоть раз пользовались npm, то вы, наверняка, знаете команду npm install
. У этой команды есть короткая версия npm i
. Так же, короткие версии есть для команд npm install --save
и npm install --save-dev
и выглядят они npm i –S
и npm i –D
, соответственно. Обратите внимание на то, что буквы S и D обязательно должны быть заглавными.
Команда npm ls
похожа на команду ls
в unix-подобных системах. Эта команда показывает список всех зависимостей вашего проекта в виде дерева каталогов. Если применить эту команду с атрибутом --depth=0
, то она покажет лишь модули, установленные вами, без учёта их собственных зависимостей.
Команда npm prune
docs.npmjs.com/cli/prune удаляет модули, которые вы установили, но не использовали в вашем проекте. Так же она оптимизирует дерево зависимостей, рекомендуется использовать эту команду перед публикацией вашего npm-пакета в репозитории npm.
Команда npm pack
– упаковывает ваш проект в архив .tgz. Это может быть полезно, если вы, например, хотите увидеть, как будет выглядеть ваш модуль в репозитории npm. Так же вы можете устанавливать модули offline, указав путь к подобному архиву npm install my-pkg.tgz
.
npm shrinkwrap
– эта команда помогает проекту запомнить конкретные версии всех модулей, на которые он опирается. Если вы опубликовали модуль, и ваш друг решит установить его через условную неделю, то он получит текущую версию проекта вместе с текущими версиями каждой из зависимостей. Если для корректной работы модуля нужные конкретные версии npm-пакетов от которых он зависит – используйте команду shrinkwrap
перед его публикацией. Для старых версий npm необходимо было использовать эту директиву после установки каждой новой зависимости, сейчас же достаточно использовать shrinkwrap
единожды.
Указать версию/изменение версии вашего проекта можно, использовав команду npm version <тип>
docs.npmjs.com/cli/version узнать о типах версий npm-пакетов, посмотреть различные возможные версии пакетов, которые вы используете, и узнать больше об именовании версий можно по этой ссылке semver.npmjs.com. Если коротко, то разработчики npm рекомендуют нумеровать версии ваших проектов с 1.0.0. Считается, что если версия ниже, например, 0.1.1 – то это предрелизная версия, ещё не готовая к публикации в системе npm, но, к сожалению, не все разработчики придерживаются этой конвенции именования. Первая цифра в обозначении 1.0.0, обозначает тип major – то есть глобальное обновление проекта. Вторая – minor, не столь глобальные изменения и третья – просто patch.
Команда npm run <что-либо>
запускает скрипты, указанные вами в разделе «scripts» файла package.json, к примеру, тесты. А чтобы не забыть применить тесты перед публикацией проекта или коммитом вы можете воспользоваться модулем husky www.npmjs.com/package/husky, который добавляет в соответствующий раздел нужные директивы.
Модуль shelljs: npm install -D shelljs
позволяет вам использовать команды Unix shell в ваших скриптах без опаски, что они не сработают в других ОС www.npmjs.com/package/shelljs.
Команда npm run env
– выводит в консоль значения всех переменных окружения, имеющих отношение к вашему проекту. Иногда вам может понадобиться обратиться к файлу npm config или к package.json из вашего скрипта, знайте, что они уже доступны вам в качестве переменных, имя которых вы можете посмотреть, запустив npm run env
.
Начиная новый проект, вы всегда используете команду npm init
, которая предлагает вам ответить на изрядное количество вопросов, для формирования файла package.json. И, зачастую, эта процедура сводится к многократному нажатию клавиши Enter. Используя команду npm init --yes
вы моментально создадите файл package.json со всеми значениями по умолчанию. Кстати, отредактировав файл ~/ .npm-init.js вы можете самостоятельно задать список вопросов, задаваемых вам по этой команде, а так же значения по умолчанию. Просто обзаведитесь личным файлом .npm-init.js и начинайте свои проекты, просто использовав команду npm init --yes
. О том, как грамотно сконфигурировать такой файл и о других возможностях package.json подробно написано в официальной документации npm вот здесь.
Помимо .npm-init.js вы так же можете создать файл .npmignore. Оформляется он так же, как .gitignore, только в этом файле перечисляются имена тех файлов и подкаталогов, которые не должны попасть в npm-пакет вашего модуля. Прочитать об этом подробнее можно в документации docs.npmjs.com/misc/developers, я лишь добавлю, что в отсутствии файла .npmignore npm использует исключения заданные в файле .gitignore, если вас это не устраивает, просто, создайте пустой .npmignore. Так же есть файлы, исключить которые невозможно, например README или package.json.
Если вы впервые публикуете npm-пакет — присмотритесь к модулю под названием np: www.npmjs.com/package/np. Он поможет вам правильно подготовить проект к публикации. А если вы работаете в команде – директива npm team
поможет вам сформировать группу и настроить права доступа на публикации модуля.
Проект npm активно развивается, и в заключении своей речи, Ashley посоветовала нам почаще использовать команду npm i npm@latest –g
, чтобы мы не отставали от нововведений, а так же отметила, что с каждой новой версией npm работает заметно быстрее.
Примечание переводчика: Это большая часть речи Ashley, если вам интересно поглядеть всё выступление, то оно доступно тут. Я не стал переводить некоторые вещи, касающиеся того, как удалить проект из системы и прочего, что не втискивается в рамки: «набери вот эту команду» или «установи вот этот модуль и будет тебе счастье».
Автор: Железный человек