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-*.