Bonjour,

Un peu maniac sur les bord et dans un soucis de "ranger" mon code source, j'aimerais pouvoir changer le dossier d'installation des pakages que j'installe avec npm.

Je m'explique. J'ai développé, pour un client, une WebApp PHP dans laquelle j'ai ajouté une partie NodeJs.
Tout fonctionne bien.
Par contre, j'aime quand une appli est rangée et que ce n'est pas trop le bazar dans le code source.

J'utilise Composer pour gérer mes dépendances PHP, et là j'ai pu personnailser le dossier d'installation de ces dépendances.
Extrait de mon fichier composer.json :

"config": {
    "vendor-dir": "include/externalLibs"
  },

C'est juste que le dossier "vendor" à la racine du projet me dérangeait.
Et c'est la même chose pour le dossier "node_modules", mais j'ai beau chercher, je ne trouve pas de configuration possible à ajouter au fichier package.json pour changer le dossier d'installation.

J'ai bien trouvé quelque chose mais ça change la config de nodejs pour tout le serveur, mais mon serveur héberge plusieurs appli NodeJs et je veux pouvoir changer la conf appli par appli et pas de manière générale.

Ce que je cherche à faire n'est peut etre même pas possible.
Si quelqu'un peut m'aider, je suis preneur.

Merci d'avance.

5 réponses


Guique
Réponse acceptée

Hello,

Comme le dit tleb et comme on peut bien le lire dans la documentation, ce dossier est central pour NodeJS.
Il est tout à fait normal que ton package.json ne puisse pas définir de route pour l'atteindre.
C'est en ça que la "solution" que je t'ai donné est très crade.

Je te conseillerai plutôt de séparer tes couches PHP et NodeJS dans des dossiers distincts.

Hello,

Tu ne peux pas modifier le nom "node_modules".
Pour installer tes modules dans un dossier différent : as-tu essayé avec --prefix ?

Le truc pénible avec cette approche, c'est que tu vas devoir écrire ton préfix dans ton require.

Exemple :

npm i --save-dev postcss --prefix ./include/externalLibs

Pour charger postcss dans index.js qui se trouve à la racine de mon dossier :

const postcss = require('./include/externalLibs/node_modules/postcss')

On finit avec un truc encore plus bordélique qu'au départ je trouve :)

jeanMat
Auteur

Merci pour ta réponse, j'avais déjà trouvé cette option --prefix.
Oui ça fonctionne bien et oui je te l'accorde ça complexifie un peu les "require"

Par contre il y a un inconvenient, quand je procède à l'installation d'un module en précisant le paramètre --prefix, celui-ci s'installe bien mais le fichier package.json ne se met pas à jour.
C'est embétant si on veut deployer l'appli sur un autre serveur pour installer tous les modules.

Merci en tout cas.

Salut,

Tout l'environnement de Node est construit au tour de ce dossier, node_modules. Vouloir tout déplacer n'a aucun sens et n'apporte rien de bon. Y'a des standards qui sont là pour être respectés. Et puis, comme ils disent, "convention over configuration".

jeanMat
Auteur

Bonjour,

Merci pour vos réponses.
Effectivement, j'aime bien cette phrase : "convention over configuration"
Ok, je me fais à l'idée de ne pas pouvoir personnaliser le dossier node_modules.

La solution que j'ai retenue pour "ranger" tout ça c'est de mettre la couche nodeJS dans un sous dossier de mon appli (merci Guique)