Глобальные исполняемые файлы NPM/Node.js
Вы когда-нибудь сталкивались с библиотекой, которая после глобальной установки предлагает ряд глобальных команд?
Это популярная библиотека eslint
. Если вы установите его глобально, вы получите глобальную команду с именем eslint
.
Давайте посмотрим, как сделать что-то подобное.
Итак, я записываю этот фрагмент кода в файл с именем hello.js
.
#!/usr/bin/env node console.log('Hey dear!');
Пожалуйста, обратите внимание на первую строку. При этом мы сообщаем Linux, что всякий раз, когда мы пытаемся выполнить этот файл, пожалуйста, используйте node
в качестве исполнителя.
Теперь, если мы попытаемся выполнить наш файл hello.js
, мы получим такую ошибку.
$ ./hello.js -bash: ./hello.js: Permission denied
Мы забыли сделать файл исполняемым. Для этого нам нужно изменить его разрешения.
Для этого нам нужно использовать chmod
, чтобы заставить его работать.
chmod +x hello.js
Параметр +x
добавляет разрешение на выполнение файла и позволяет запускать его как программу.
Теперь мы можем запустить его так!
$ ./hello.js Hey dear!
Вау, поздравляю с вашим первым исполняемым файлом Node.js.
Кстати, мы можем упростить его еще больше, переименовав его во что-то вроде hello
.
Тип файла в данном случае не важен, так как мы написали что-то волшебное в первой строке файла.
Я не буду пробовать это, так как мы хотели что-то, что можно было бы сыграть с npm i -g
, верно?
Итак, продолжаем готовить…
Мы можем проверить базу кода eslint's
и посмотреть, как они это сделали. Нам просто нужно проверить их файл package.json
.
Как вы можете видеть здесь, они использовали этот объект bin
для настройки своей глобальной исполняемой команды.
Теперь я собираюсь сделать то же самое.
Я создам проект Node.js. И настройте исполняемый файл hello.js
, как в примере eslint's
.
mkdir sayhi-nairi && cd sayhi-nairi npm init --yes
В моем случае имя команды hello
, можно выбрать другое.
{ // ... "bin" : { "hello" : "./hello.js" } }
На данный момент все, что нам нужно сделать, это опубликовать нашу библиотеку и попытаться выполнить глобальную установку, чтобы наблюдать за ее поведением.
npm publish
Вуаля!
Используя команду which
, вы можете увидеть, где npm
сохранил этот исполняемый файл.
Для получения дополнительной информации обратитесь к документации NPM и поэкспериментируйте с различными функциями, чтобы узнать, чего еще можно достичь.
***
Спасибо, не стесняйтесь задавать любые вопросы или пишите мне @nairihar
Также следите за моей рассылкой Вселенная JavaScript в Telegram: @javascript