Bug 42036

Summary: Missing node-gyp
Product: Sisyphus Reporter: Stanislav Levin <slev>
Component: npmAssignee: Vitaly Lipatov <lav>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: critical    
Priority: P5 CC: amakeenk, lav
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Stanislav Levin 2022-02-25 11:39:41 MSK
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).
Comment 1 Stanislav Levin 2022-02-25 11:48:54 MSK
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
Comment 2 Vitaly Lipatov 2022-02-26 23:09:55 MSK
(Ответ для 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 вообще-то не нужен.
Comment 3 Stanislav Levin 2022-02-28 11:39:37 MSK
(Ответ для 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.
Comment 4 Vitaly Lipatov 2022-02-28 12:14:50 MSK
(Ответ для 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.
Вас понял. С вашей позицией не согласен.
Comment 5 Stanislav Levin 2022-03-03 18:17:17 MSK
Проблема не решена.

cli для npm не работает совсем.
Comment 6 Alexander Makeenkov 2022-08-02 17:57:56 MSK
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)
Comment 7 Repository Robot 2022-08-03 23:40:49 MSK
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
Comment 8 Stanislav Levin 2022-08-04 12:08:27 MSK
It works, many thanks!