- PVSM.RU - https://www.pvsm.ru -

Вы не знаете npm

image

Перевод и небольшое творческое переосмысление доклада Ashley Williams(человека из команды разработчиков npm) с конференции JavaScript fwdays'17, которая прошла 22 апреля 2017 года в Киеве, Украина. Целью статьи я не ставил дословно перевести выступление Ashley, для вас будет представлена выжимка основных моментов, а именно – фишки npm, о которых не все знают, но знать о которых полезно каждому. В подвале я оставлю ссылку на страницу выступления на сайте frameworksdays.com [1], где вы сможете найти видео выступления, презентацию и контакты самой 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 [2] удаляет модули, которые вы установили, но не использовали в вашем проекте. Так же она оптимизирует дерево зависимостей, рекомендуется использовать эту команду перед публикацией вашего 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 [3] узнать о типах версий npm-пакетов, посмотреть различные возможные версии пакетов, которые вы используете, и узнать больше об именовании версий можно по этой ссылке semver.npmjs.com [4]. Если коротко, то разработчики 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 [5], который добавляет в соответствующий раздел нужные директивы.

Модуль shelljs: npm install -D shelljs позволяет вам использовать команды Unix shell в ваших скриптах без опаски, что они не сработают в других ОС www.npmjs.com/package/shelljs [6].

Команда 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 вот здесь [7].

Помимо .npm-init.js вы так же можете создать файл .npmignore. Оформляется он так же, как .gitignore, только в этом файле перечисляются имена тех файлов и подкаталогов, которые не должны попасть в npm-пакет вашего модуля. Прочитать об этом подробнее можно в документации docs.npmjs.com/misc/developers [8], я лишь добавлю, что в отсутствии файла .npmignore npm использует исключения заданные в файле .gitignore, если вас это не устраивает, просто, создайте пустой .npmignore. Так же есть файлы, исключить которые невозможно, например README или package.json.

Если вы впервые публикуете npm-пакет — присмотритесь к модулю под названием np: www.npmjs.com/package/np [9]. Он поможет вам правильно подготовить проект к публикации. А если вы работаете в команде – директива npm team поможет вам сформировать группу и настроить права доступа на публикации модуля.

Проект npm активно развивается, и в заключении своей речи, Ashley посоветовала нам почаще использовать команду npm i npm@latest –g, чтобы мы не отставали от нововведений, а так же отметила, что с каждой новой версией npm работает заметно быстрее.

Примечание переводчика: Это большая часть речи Ashley, если вам интересно поглядеть всё выступление, то оно доступно тут [10]. Я не стал переводить некоторые вещи, касающиеся того, как удалить проект из системы и прочего, что не втискивается в рамки: «набери вот эту команду» или «установи вот этот модуль и будет тебе счастье».

Автор: Железный человек

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/node-js/254122

Ссылки в тексте:

[1] frameworksdays.com: https://frameworksdays.com/

[2] docs.npmjs.com/cli/prune: https://docs.npmjs.com/cli/prune

[3] docs.npmjs.com/cli/version: https://docs.npmjs.com/cli/version

[4] semver.npmjs.com: https://semver.npmjs.com/

[5] www.npmjs.com/package/husky: https://www.npmjs.com/package/husky

[6] www.npmjs.com/package/shelljs: https://www.npmjs.com/package/shelljs

[7] здесь: https://docs.npmjs.com/getting-started/using-a-package.json

[8] docs.npmjs.com/misc/developers: https://docs.npmjs.com/misc/developers

[9] www.npmjs.com/package/np: https://www.npmjs.com/package/np

[10] доступно тут: https://frameworksdays.com/event/js-frameworks-day-2017/review/you-dont-know-npm

[11] Источник: http://habrahabr.ru/sandbox/108916/