I'd be interested in some of the scenarios above, but where a version of
Node.js higher than the default has been installed.

For example I install nodejs v20 (F37's default Node is v18, but v20 is now
available).  I then run  `dnf upgrade` what happens?

Overall what you describe seems more familiar to me in terms of how to
manage versions/multiple copies of a component on linux.

One of question is if it would be possible to warn people or require a
--force flag if people install EOL versions, even if it is the default for
the Fedora version.  I understand we always want to allow people to stick
to the version that came with a Fedora/RHEL version but I think we could do
more to help them avoid accidentally use an EOL verion.



On Thu, Aug 25, 2022 at 12:39 PM Troy Dawson <[email protected]> wrote:

> On Thu, Aug 25, 2022 at 8:48 AM Stephen Gallagher <[email protected]>
> wrote:
>
>> tl;dr: I want to drop the Node.js modules and make Node available as
>> parallel-installable interpreters (with /usr/bin/node managed by the
>> alternatives subsystem).
>>
>> For some time now, I've been looking at ways to improve our Node.js
>> story to make it more maintainable. Modules seemed like a Good Idea at
>> the Timeā„¢, but it has been difficult to maintain over the years. I'd
>> like to propose that we abandon Modules as our strategy and instead
>> move to parallel-installable packages. I've been quietly working on a
>> proof-of-concept for this for a while now and it's finally in
>> good-enough shape[1] that I can share it with you.
>>
>> The change involves several key pieces:
>>
>> 1. The NPM package is no longer delivered as a subpackage of Node.js.
>> We return to maintaining it as a separate package in Fedora.[2]
>> 2. We ship the Node.js interpreter as `/usr/bin/node-$MAJOR` and use
>> the alternatives[3] subsystem to maintain the `/usr/bin/node` symlink.
>> 3. We configure the alternatives priority system such that newer
>> versions of Node are preferred, with the exception of the version
>> selected as the default for that Fedora release which will always be
>> preferred over any other, if multiple versions are installed.
>>
>> Some examples:
>> On Fedora 37, the `nodejs` package is not installed (F37's default Node
>> is v18).
>> A `dnf install nodejs` would result in the `nodejs18` package being
>> installed. This package would provide `/usr/bin/node `as a symlink to
>> `/usr/bin/node-18`.  A user could also `dnf install nodejs16`, which
>> would provide the `/usr/bin/node-16` binary. This would not change the
>> symlink for `/usr/bin/node`.
>>
>> On Fedora 37, the `nodejs` package is not installed (F37's default Node
>> is v18).
>> A `dnf install nodejs16` would result in the `nodejs16` package being
>> installed. This package would provide `/usr/bin/node` as a symlink to
>> `/usr/bin/node-16`.  A user could also install `nodejs-18`, which
>> would provide the `/usr/bin/node-18` binary. Because Node.js v18 is
>> the default for Fedora 37, this would result in the `/usr/bin/node`
>> symlink being changed to point at `/usr/bin/node-18`.
>>
>> On Fedora 37, the existing `nodejs` package is installed (F37's
>> default Node is v18).
>> A `dnf upgrade` would result in the `nodejs-18` package being
>> installed, replacing `nodejs`. This package would provide
>> `/usr/bin/node `as a symlink to  `/usr/bin/node-18`. A user could also
>> install `nodejs-16`, which would provide the `/usr/bin/node-16`
>> binary. This would not change the symlink for `/usr/bin/node`.
>>
>>
>>
>> Some benefits to this approach:
>> * With parallel-install, it becomes possible to run test suites
>> against multiple major versions at the same time. For example, the NPM
>> package will be able[4] to run its suite against v16 and v18 to ensure
>> that it is compatible with both versions.
>> * The complexities of the Module build would go away.
>>
>> Some risks to this approach:
>> * If Node.js dependencies like libuv or libnghttp2 make incompatible
>> changes that cannot work with both older and newer Node.js releases,
>> we will need to create compat- packages for them.
>>
>>
>>
>> [1] https://copr.fedorainfracloud.org/coprs/sgallagh/nodejs-alternatives/
>> [2] https://bugzilla.redhat.com/show_bug.cgi?id=2075170
>> [3]
>> https://docs.fedoraproject.org/en-US/packaging-guidelines/Alternatives/
>> [4]
>> https://download.copr.fedorainfracloud.org/results/sgallagh/nodejs-alternatives/fedora-37-x86_64/04759584-npm/npm.spec
>>
>
> You've already answered everything I was going to  ask about this.
> I just want to say I like this plan.
>
> Troy
>
> _______________________________________________
> nodejs mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> Fedora Code of Conduct:
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives:
> https://lists.fedoraproject.org/archives/list/[email protected]
> Do not reply to spam, report it:
> https://pagure.io/fedora-infrastructure/new_issue
>
_______________________________________________
nodejs mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/[email protected]
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to