Какова цель.bin-папки в node_modules?

Сегодня один коллега объяснил мне, как создавать проекты nodejs, и я замечаю, что в. /node_modules есть невидимая папка с именем.bin. Я должен был сказать, что я обнаружил это после добавления в инструменты "bootcamp" и "bower". Какая цель? Для чего он создан?

Ответ 1

Это папка, в которой находятся двоичные файлы (исполняемые файлы) из ваших узловых модулей.

На сайте НПМ говорится:

Исполняемые файлы В глобальном режиме исполняемые файлы связаны с {prefix}/bin в Unix или непосредственно с {prefix} в Windows.

В локальном режиме исполняемые файлы связаны с. /node_modules/.bin, чтобы их можно было сделать доступными для сценариев, запускаемых через npm. (Например, чтобы при запуске теста npm тестовый путь был в пути.)

Ответ 2

В каталоге node_modules/.bin хранятся двоичные файлы модулей, используемых вашим проектом, обычно с использованием символических ссылок на соответствующие двоичные файлы в соответствующем каталоге модулей. Например, именно так я вижу двоичный standard из стандарта пакета npm (руководство по стилю JavaScript, linter и formatter)

$ls node_modules/.bin/standard -l
lrwxrwxrwx 1 jfolpf jfolpf 22 jul 17 08:29 standard -> ../standard/bin/cmd.js

Когда я запускаю node_modules/.bin/standard я действительно запускаю node_modules/standard/bin/cmd.js из standard пакета npm. Эта символическая ссылка была создана при установке пакета, то есть при npm install standard

Эти двоичные файлы также позволяют использовать модули непосредственно из сценариев npm. Например, вы, возможно, не установили standard глобально с npm install standard -g, что означает, что вы не можете запустить standard напрямую со своего терминала в главном каталоге вашего модуля.

Но вы можете написать тестовый скрипт npm start или npm, добавив в файл package.json:

"scripts": {
  "start": "standard src/*.js",
  "test": "standard src/*.js && node myTest.js"
}

и это совершенно правильно, учитывая, что у вас есть стандарт в качестве зависимости проекта. Даже если модуль не является глобальным и не может использоваться операционной системой напрямую, npm может найти папку bin для заданного standard имени модуля и запустить скомпилированный двоичный файл. Так что npm запускает такой скрипт:

"start": "node_modules/.bin/standard src/*.js",