Node.js Policy

Материал из ALT Linux Wiki
Перейти к: навигация, поиск

Policy по упаковке модулей nodejs

Stub.png
Черновик политики Sisyphus
Автор(ы) — lav


Какие модули сто́ит паковать[править]

  • Важно учитывать, что модулей для node (npm-пакетов) многие тысячи, и никакого смысла собирать в репозиторий в виде rpm-пакетов их нет, тем более невозможно учесть разницу в версиях.
  • Необходимо собирать в пакеты только те модули, которые требуют компиляции (с системными библиотеками), а также модули, которые являются программами в /usr/bin (например, npm, yarn, sass, node-gyp и подобное).``

Все пакеты npmjs паковать в rpm было бы неправильно, потому что они уже суть упакованные модули для nodejs. А вот пакеты для nodejs, использующие нативные библиотеки, паковать нужно обязательно, иначе невозможно обеспечить сборку бинарной части такого пакета.

Как паковать программы на nodejs[править]

Программа на nodejs не является модулем для nodejs, поэтому указывать префикс, как у модуля, не требуется.

Модули nodejs (в каталоге node_modules), входящие в пакет с программой, не должны содержать внутри бинарных исполняемых файлов. Такие модули должны быть упакованы в отдельные rpm-пакеты.

Название пакета с модулем[править]

Название пакета с модулем для node: nodejs-<имя>.[1].

Префикс rpm-пакета должен определяться не хранилищем, где располагается пакет npmjs, а местом, куда пакет будет положен в файловой системе (местом поиска — откуда будут взяты его файлы, если угодно).

И ассоциироваться такой префикс должен не с хранилищем (то есть с сайтом, который и поменяться может), а с названием экосистемы для пакетов, среды их исполнения.

Традиционно принято в качестве префикса использовать название языка. Так в репозитории Сизиф есть пакеты erlang-*, python-*, perl-*, ruby-*, php-* java-*. Возможно кому-то показалось, что это названия языков, на которых написаны модули. Нет, зачастую такие модули написаны на C, а не на php. И префикс имени пакета для языковых систем показывает, расширение какого языка поставляет этот пакет.

Использование макросов[править]

При сборке пакетов для node следует использовать макросы из пакета rpm-macros-nodejs.


Размещение модуля в иерархии файловой системы[править]

  • %nodejs_sitelib/<имя> — размещение модуля <имя>.

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

Макросы из rpm-macros-nodejs[править]

  •  %nodejs_sitelib — каталог для размещения модулей.
  •  %nodejs_arches — список архитектур, на которых поддерживается nodejs.

Пример[править]

Пример пакета с модулем можно посмотреть здесь:

Решения в других дистрибутивах[править]


  1. Интересно, что в Fedora node упакован в пакет node, а модули — в пакеты nodejs-*. А в Ubuntu наоборот, node в пакете nodejs, а модули в пакетах node-*.