Helpers nvm pour nodejs


#1

Pour simplifier la gestion des packages utilisant nodejs, et éviter les conflits de version, je propose un helper permettant d’installer et d’utiliser une version précise de nodejs en utilisant nvm

L’ensemble de la pull request mettant en place nvm est disponible ici.

En détail:
Ce sont en réalité 3 helpers qui permettent de gérer la mise en place de nodejs

  • ynh_install_nodejs: Ce helper se charge d’installer nvm et d’installer la version demandée de nodejs, et la version correspondante de npm.
  • ynh_use_nodejs: Celui-ci charge une version de nodejs dans le shell courant, ce qui permettra d’utiliser la version ciblée de node et npm.
  • ynh_remove_nodejs: Ce helper sert à supprimer la version de nodejs utilisée, si elle n’est pas utilisée par une autre application. Et supprime également nvm si plus aucune app n’en dépend.

À l’usage, ynh_install_nodejs est à utiliser dans les scripts install et restore pour mettre en place nvm et nodejs.
ynh_use_nodejs, devrait être utilisé dans les autres scripts, upgrade principalement. C’est à dire dés lors que node ou npm est nécessaire sans pour autant qu’il ne soit nécessaire d’installer nodejs.

3 variables sont mises à disposition par les helpers.

  • nodejs_path qui contient le path absolu de la version de node, sous la forme /opt/nvm/vx.xx.xx/bin
    Cette variable permettra de faire des appel direct à node ou npm si nécessaire.
  • nodejs_version qui contient simplement le numéro de version de nodejs demandé pour cette app.
    Essentiellement utilisé pour construire les 2 autres variables et pour la suppression.
  • nodejs_use_version est un alias permettant de charger la version liée à l’app dans le shell courant.
    Cet alias sert essentiellement à charger la version nécessaire de nodejs en dehors des scripts YunoHost, par exemple dans un script systemd.

Il faut par contre se méfier d’un point important, nvm utilise $PATH pour mettre en avant une version de nodejs, en ajoutant simplement $nodejs_path au début de $PATH pour le shell courant.
Ceci à des contraintes si vous utiliser un autre shell, un autre utilisateur ou autre situation particulière qui se traduira par l’absence de node ou de npm.
Par exemple, sudo ne peut pas être utilisé directement, car il charge un $PATH par défaut.
De même l’usage dans systemd ne chargera pas les variables d’environnement.
Il est donc nécessaire de propager la variable $PATH

Ces helpers devrait être mis à l’épreuve dans d’autres packages utilisant nodejs avant d’être proposés en tant que helpers officiels.


Monica v2.10.0 - Personal Relationship Manager
#2

Après mise à l’épreuve, nvm a montré ses limites en particulier en raison de la complexité de son usage. Il s’est avéré peu adapté à l’usage qu’on en fait.
En particulier, nvm est orienté vers usage global pour l’ensemble du système.

Pour cette raison les helpers nvm ont migré vers n. Qui rempli la même fonction mais est plus adapté à un usage parallèle.

Les nouveaux helper node peuvent-être trouvé sur le dernier commit de etherpad.
Et plus précisément ici

L’usage reste sensiblement le même que le précédent helper nvm.


#3

Bonjour,

Dans le cadre de l’intégration de Kresus dans YNH, je souhairerai savoir si les helpers sont utilisables “de base”, s’il faut les copier dans le package YNH etc.

Kresus a besoin de node 4, bientôt 6, et on aimerait mettre le mon possible le bazar dans les installs node existantes.

MErci


#4

Bonjour,

ce helper n’est pas encore passé en officiel, parce que nous préférons d’abord l’éprouver.
Donc il faut le copier dans ton package pour le moment.

Tu trouveras la dernière version ici


#5

hello @Maniack_Crudelis - tu as des nouvelles concernant la stabilité du helper, ou une quelconque version plus à jour?

J’ai quelques soucis avec dans le cadre du packet peertube_ynh. Mais peut-être est-ce dû à une erreur de ma part.


#6

Salut,

tu peux eventuellement regarder ici : https://github.com/YunoHost-Apps/Experimental_helpers/blob/master/ynh_install_nodejs/ynh_install_nodejs

Par exemple, l’app wekan_ynh s’en sert.