Глобальные исполняемые файлы 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