With npm update 6.14.15 => 8.3.1 the `npm` tool is broken out of the box. how to reproduce: ``` hsh --ini hsh-install npm [someuser somedir]$ hsh-run -- npm config --global Error: Cannot find module 'node-gyp/bin/node-gyp.js' Require stack: - /usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js - /usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js - /usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/dir.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/git.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/fetcher.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/index.js - /usr/lib/node_modules/npm/lib/utils/update-notifier.js - /usr/lib/node_modules/npm/lib/cli.js - /usr/lib/node_modules/npm/bin/npm-cli.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15) at Function.resolve (internal/modules/cjs/helpers.js:99:19) at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js:5:37) at Module._compile (internal/modules/cjs/loader.js:1085:14) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) at Module.load (internal/modules/cjs/loader.js:950:32) at Function.Module._load (internal/modules/cjs/loader.js:790:12) at Module.require (internal/modules/cjs/loader.js:974:19) at require (internal/modules/cjs/helpers.js:93:18) at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js:1:23) ``` RPM build for npm packages is broken (see FTBFS).
npm's node-gyp is unbundled during RPM build, but there is no requirement for an external one. https://github.com/npm/cli/blob/latest/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md
(Ответ для Stanislav Levin на комментарий #1) > npm's node-gyp is unbundled during RPM build, but there is no requirement > for an external one. Так и должно быть, node-gyp не нужен при сборке проектов, потому что он для сборки бинарных модулей, которые должны быть поставлены из пакета. Если же по каким-то причинам вы собираетесь нарушить это правило, то ставьте node-gyp дополнительно. Зависимости нет потому, что node-gyp тянет компилятор, который для npm вообще-то не нужен.
(Ответ для Vitaly Lipatov на комментарий #2) > (Ответ для Stanislav Levin на комментарий #1) > > npm's node-gyp is unbundled during RPM build, but there is no requirement > > for an external one. > Так и должно быть, node-gyp не нужен при сборке проектов, потому что он для > сборки бинарных модулей, которые должны быть поставлены из пакета. Считаю предположение об использовании только системных node модулей не корректно, так как, фактически (стандарт?), для RPM сборки node модулей используется бандл всех зависимостей. > Если же по каким-то причинам вы собираетесь нарушить это правило, то ставьте > node-gyp дополнительно. > Зависимости нет потому, что node-gyp тянет компилятор, который для npm > вообще-то не нужен. Может, нужен, может, нет... зависит не от npm, а от конкретных зависимостей модуля. https://docs.npmjs.com/cli/v8/commands/npm#dependencies: > If one of the packages npm tries to install is a native node module and requires compiling of C++ Code, npm will use node-gyp for that task. For a Unix system, node-gyp needs Python, make and a buildchain like GCC. Поэтому считаю, что сломана часть функционала из коробки. Как пользователь, поставив rpm пакет npm, ожидаю, что весь задокументированный функционал работает. Сейчас это не так. Допускаю, что существуют системные конфигурации, для которых наличие какого-либо компилятора неприемлемо. Но не стоит ущемлять всех остальных регулярных пользователей npm.
(Ответ для Stanislav Levin на комментарий #3) > (Ответ для Vitaly Lipatov на комментарий #2) > > (Ответ для Stanislav Levin на комментарий #1) > > > npm's node-gyp is unbundled during RPM build, but there is no requirement > > > for an external one. > > Так и должно быть, node-gyp не нужен при сборке проектов, потому что он для > > сборки бинарных модулей, которые должны быть поставлены из пакета. > > Считаю предположение об использовании только системных node модулей не > корректно, так как, фактически (стандарт?), для RPM сборки node модулей > используется бандл всех зависимостей. Фактически для RPM сборки используется бандл, исключая бинарные пакеты. Примеров таких сборок с моей стороны в репозитории множество. Так же есть https://www.altlinux.org/Node.js_Policy Ваше мнение понял. > > > Если же по каким-то причинам вы собираетесь нарушить это правило, то ставьте > > node-gyp дополнительно. > > Зависимости нет потому, что node-gyp тянет компилятор, который для npm > > вообще-то не нужен. > > Может, нужен, может, нет... зависит не от npm, а от конкретных зависимостей > модуля. Считаю некорректным собирать бинарные модули в составе проекта. Потому что так вы и предкомпилированные библиотеки из интернета подтянете. А проект на node.js вообще должен быть в noarch-пакете. > https://docs.npmjs.com/cli/v8/commands/npm#dependencies: > > If one of the packages npm tries to install is a native node module and requires compiling of C++ Code, npm will use node-gyp for that task. For a Unix system, node-gyp needs Python, make and a buildchain like GCC. > > Поэтому считаю, что сломана часть функционала из коробки. > Как пользователь, поставив rpm пакет npm, ожидаю, что весь > задокументированный функционал работает. Сейчас это не так. > > Допускаю, что существуют системные конфигурации, для которых наличие > какого-либо компилятора неприемлемо. Но не стоит ущемлять всех остальных > регулярных пользователей npm. Вас понял. С вашей позицией не согласен.
Проблема не решена. cli для npm не работает совсем.
npm-8.11.0-alt1 - ошибка всё ещё воспроизводится: $ npm Error: Cannot find module 'node-gyp/bin/node-gyp.js' Require stack: - /usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js - /usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js - /usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/dir.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/git.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/fetcher.js - /usr/lib/node_modules/npm/node_modules/pacote/lib/index.js - /usr/lib/node_modules/npm/lib/utils/update-notifier.js - /usr/lib/node_modules/npm/lib/npm.js - /usr/lib/node_modules/npm/lib/cli.js - /usr/lib/node_modules/npm/bin/npm-cli.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15) at Function.resolve (node:internal/modules/cjs/helpers:108:19) at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js:5:37) at Module._compile (node:internal/modules/cjs/loader:1105:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js:1:23)
npm-8.11.0-alt2 -> sisyphus: Wed Aug 03 2022 Vitaly Lipatov <lav@altlinux.ru> 8.11.0-alt2 - drop node-gyp deps (ALT bug 42036) - remove unused scripts makes extra deps
It works, many thanks!