Pull to refresh

Немного о npm-scripts

Reading time2 min
Views28K
Если кто не знаком с предметной областью, то NPM — node package manager (аналог bundler/composer/easy_install/nuget) – средство для управления зависимостями в вашем Node.js проекте, что по совместительсву может выполнять некоторое количество полезных функций. Написан Айзеком Шлютером, который достаточно радикальным образом продвигал в начале своей истории (рассылая всем существующим Node.js проектам пулл-реквесты с добавлением package.json — манифестом зависимостей).

Все нижеприведенные вещи известны многим, но для некоторых это может стать приятным открытием, что сэкономит некоторое количество набираемых в символов.

pre-/post- myscript


Иногда, в целях автоматизации некоторой рутины, но при малом желании тащить за собой N мегабайт зависимостей в виде разных билд-инструментов, а в некоторых случаях под впечатлением от статьи за авторством @substack'а, разработчики могут начать в своих npm script'ах писать длиннющие строки, состоящие из перечня команд и '&&'. По крайней мере, одним из выходов может служить разбитие одной сложной команды на несколько более простых. Самым замечательным является тот факт, что когда вы запускаете свой скрипт npm run-script myscript, npm также попытается выполнить команды, что занесены в premyscript и postmyscript перед и после выполнения вашего скрипта соответственно. Таким образом, 3 сложных команды, что раньше составляли один скрипт, можно просто разнести в три скрипта.

Код, что отвечает за это, довольно таки прост, и пытается добавить к названию команды pre-/post- и запустить их в случае, если это сама по себе не pre/post команда и не команда 'restart', что обрабатывается особым способом.

npm run вместо run-script, npm i вместо npm install


Заголовок, в принципе, всё описывает: очень часто вместо «npm run-script» можно увидеть «npm run», или «npm i», что соответствует запуску команды «npm install». Код, что делает это, прост: используя библиотеку abbrev-js все команды из списка превращаются в огромный словарь, в котором ключами служат сокращения слов, вида:
{
i: 'install',
in: 'install',
ins: 'install',
...

И запускает соответствующую команду.

Нет необходимости писать пути для исполняемых файлов в скриптах


Иногда npm скрипты используются, чтобы запускать локально установленные npm пакеты с бинарниками. Но часто люди не знают об одной приятной особенности: npm во время исполнения добавляет папку node_modules/.bin в аналог переменой PATH. То есть, если у вас локально установленная mocha, вам не нужно писать
"scripts": {
  "test": "./node_modules/.bin/mocha"
}

А достаточно лишь написать "test": "mocha". Приятным бонусом этого является то, что разработчики под виндоус перестанут жаловаться на то, что у них ничего не запускается (причина в том, что используются разные разделители в пути).

Бонус: require на файлах модуля


Команда require, оказывается, при работе с названиями модулей (а не относительными путями) может не только загрузить index.js/index.node файл из корня нашего модуля, что установлен в node_modules, но и предоставить возможность загрузить произвольный файл изнутри модуля (нарушая любую инкапсуляцию, но иногда может быть полезно). Поэтому можно делать require('module/lib/hidden-stuff').

Бонус #2: пасхалки в npm


В нпм есть парочку забавных пасхалок.
Tags:
Hubs:
+12
Comments1

Articles

Change theme settings