Node.js Policy: различия между версиями
(Новая страница: «{{h0|Policy по упаковке nodejs}} {{DraftPolicy|responsible=lav}} * При сборке пакетов для node следует использоват…») |
|||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{h0|Policy по упаковке nodejs}} | {{h0|Policy по упаковке модулей nodejs}} | ||
{{DraftPolicy|responsible=lav}} | {{DraftPolicy|responsible=lav}} | ||
* При сборке пакетов для node следует использовать макросы из пакета {{pkg|rpm-macros-nodejs}}. | === Какие модули сто́ит паковать === | ||
* Важно учитывать, что модулей для node (npm-пакетов) многие тысячи, и никакого смысла собирать в репозиторий в виде rpm-пакетов их нет, тем более невозможно учесть разницу в версиях.'' | |||
* Необходимо собирать в пакеты только те модули, которые требуют компиляции (с системными библиотеками), а также модули, которые являются программами в /usr/bin (например, npm, yarn, sass, node-gyp и подобное).`` | |||
Все пакеты npmjs паковать в rpm было бы неправильно, потому что они уже суть упакованные модули для nodejs. | |||
А вот пакеты для nodejs, использующие нативные библиотеки, | |||
паковать нужно обязательно, иначе невозможно обеспечить сборку бинарной части такого пакета. | |||
=== Как паковать программы на nodejs === | |||
Программа на nodejs не является модулем для nodejs, поэтому указывать префикс, как у модуля, не требуется. | |||
Модули nodejs (в каталоге node_modules), входящие в пакет с программой, не должны содержать внутри бинарных исполняемых файлов. Такие модули должны быть упакованы в отдельные rpm-пакеты. | |||
=== Название пакета с модулем === | |||
Название пакета с модулем для node: nodejs-<имя>.<ref>Интересно, что в Fedora node упакован в пакет node, а модули — в пакеты nodejs-*. А в Ubuntu наоборот, node в пакете nodejs, а модули в пакетах node-*.</ref>. | |||
Префикс rpm-пакета должен определяться не хранилищем, где располагается пакет npmjs, а местом, куда | |||
пакет будет положен в файловой системе (местом поиска — откуда будут взяты его файлы, если угодно). | |||
И ассоциироваться такой префикс должен не с хранилищем (то есть с сайтом, который и поменяться может), | |||
а с названием экосистемы для пакетов, среды их исполнения. | |||
Традиционно принято в качестве префикса использовать название языка. Так в репозитории Сизиф есть пакеты erlang-*, python-*, perl-*, ruby-*, php-* java-*. | |||
Возможно кому-то показалось, что это названия языков, на которых написаны модули. Нет, зачастую такие модули написаны | |||
на C, а не на php. И префикс имени пакета для языковых систем показывает, расширение | |||
какого языка поставляет этот пакет. | |||
=== Использование макросов === | |||
При сборке пакетов для node следует использовать макросы из пакета {{pkg|rpm-macros-nodejs}}. | |||
=== Размещение модуля в иерархии файловой системы === | === Размещение модуля в иерархии файловой системы === | ||
Строка 14: | Строка 44: | ||
* %nodejs_sitelib — каталог для размещения модулей. | * %nodejs_sitelib — каталог для размещения модулей. | ||
* %nodejs_arches — список архитектур, на которых поддерживается nodejs. | * %nodejs_arches — список архитектур, на которых поддерживается nodejs. | ||
=== Пример === | |||
Пример пакета с модулем можно посмотреть здесь: | |||
* https://packages.altlinux.org/ru/sisyphus/specfiles/node-webpack | |||
=== Решения в других дистрибутивах === | |||
* https://fedoraproject.org/wiki/Packaging:Node.js | |||
* https://docs.fedoraproject.org/en-US/packaging-guidelines/Node.js/ | |||
* [https://www.opennet.ru/opennews/art.shtml?num=54402 Debian и Fedora пытаются справиться с проблемой мелких зависимостей] | |||
* https://pagure.io/fesco/issue/2523 | |||
{{Category navigation|title=Web|category=Web}} | {{Category navigation|title=Web|category=Web}} |
Текущая версия от 20:29, 12 марта 2021
Policy по упаковке модулей nodejs
Какие модули сто́ит паковать
- Важно учитывать, что модулей для 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.
Пример
Пример пакета с модулем можно посмотреть здесь:
Решения в других дистрибутивах
- https://fedoraproject.org/wiki/Packaging:Node.js
- https://docs.fedoraproject.org/en-US/packaging-guidelines/Node.js/
- Debian и Fedora пытаются справиться с проблемой мелких зависимостей
- https://pagure.io/fesco/issue/2523
- ↑ Интересно, что в Fedora node упакован в пакет node, а модули — в пакеты nodejs-*. А в Ubuntu наоборот, node в пакете nodejs, а модули в пакетах node-*.