NodeJS erreurs NPM et Grunt

Signaler
Messages postés
36
Date d'inscription
mercredi 12 février 2020
Statut
Membre
Dernière intervention
2 juillet 2020
-
Messages postés
29255
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 juillet 2020
-
Bonjour,


J'essaie d'installer un programme "docdoku-web-front" qui nécessite nodejs avec grunt et npm. Quand je lance la commande
npm run dev
dans mon projet, j'ai des erreurs ave npm et je pense que le programme nécessite 2 versions de grunt 0.4.1 et supérieur à 1

Quand je lance la commande pour déployer grunt 0.41:
npm install --save-dev "grunt@~0.4.1"


J'obtiens ces erreurs:
npm WARN deprecated coffee-script@1.3.3: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.2.3: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN load-grunt-tasks@4.0.0 requires a peer of grunt@>=1 but none is installed. You must install peer dependencies yourself.


Si je lance ensuite cette commande pour déployer grunt>=1:
npm install --save-dev "grunt@>=1"


J'obtiens ces erreurs:
npm WARN grunt-connect-proxy@0.2.0 requires a peer of grunt@~0.4.1 but none is installed. You must install peer dependencies yourself.
npm WARN grunt-execute@0.2.2 requires a peer of grunt@~0.4.1 but none is installed. You must install peer dependencies yourself.


C'est un peu le serpent qui se mange la queue.

Mon fichier package.json est configuré comme ceci:

{
"name": "docdokuplm",
"private": true,
"description": "Web based application for DocDokuPLM server",
"version": "1.1.0",
"devDependencies": {
"bower": "~1.8.0",
"casperjs": "~1.1.3",
"connect-livereload": "~0.3.2",
"debug": "^4.1.1",
"del": "~1.2.0",
"grunt": "^1.1.0",
"grunt-cli": "^1.2.0",
"grunt-connect-proxy": "~0.2.0",
"grunt-contrib-clean": "~1.0.0",
"grunt-contrib-compress": "~1.3.0",
"grunt-contrib-concat": "~1.0.1",
"grunt-contrib-connect": "^1.0.2",
"grunt-contrib-copy": "~1.0.0",
"grunt-contrib-cssmin": "^3.0.0",
"grunt-contrib-htmlmin": "~2.4.0",
"grunt-contrib-jshint": "~1.1.0",
"grunt-contrib-jst": "~1.0.0",
"grunt-contrib-less": "~2.0.0",
"grunt-contrib-requirejs": "~1.0.0",
"grunt-contrib-uglify": "~2.0.0",
"grunt-contrib-watch": "~1.1.0",
"grunt-execute": "~0.2.2",
"grunt-rev": "~0.1.0",
"grunt-text-replace": "^0.4.0",
"grunt-usemin": "~3.1.1",
"jit-grunt": "~0.10.0",
"jshint-stylish": "~0.1.5",
"load-grunt-tasks": "~4.0.0",
"serve-static": "^1.13.2",
"time-grunt": "~0.2.10",
"underscore": "~1.7.0",
"uuid": "~3.0.1",
"xml2js": "~0.4.9",
"yargs": "^15.3.1"
},
"engines": {
"node": ">=0.10.0"
},
"scripts": {
"preclean": "npm install",
"prebuild": "npm install",
"predev": "npm install",
"prevalidate": "npm install",
"postinstall": "bower install",
"clean": "grunt clean",
"build": "grunt build",
"dist": "grunt serve:dist",
"dev": "grunt serve",
"validate": "grunt jshint"
},
"dependencies": {
"http-proxy": "^1.18.1",
"lodash": "^4.17.15",
"lodash.update": "^4.10.2"
}
}


Auriez vous quelques idées ?

7 réponses

Messages postés
29255
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 juillet 2020
6 885
Bonjour,

Je ne m'y connais pas en
npm
, mais si on fait le parallèle avec apt, dans ce genre de situations, on essaierait d'utiliser la dernière version de chaque paquet plutôt que de geler certains numéro de version. Est-ce quelque chose d'envisageable dans ton cas ?

Bonne chance
Messages postés
36
Date d'inscription
mercredi 12 février 2020
Statut
Membre
Dernière intervention
2 juillet 2020
4
Merci pour votre réponse et cette nouvelle voie a exploiter, malheureusement je ne sais pas comment isoler les paquets à mettre à jour. Je viens de refaire l'installation de nodejs et npm sur une version plus récente et stable nodejs 12, en changeant les permissions "chmod 777" sur les répertoires de "docdoku-web-front" et je retrouve les mêmes erreurs. Cette fois-ce, j'ai lancé "npm audit" pour voir les dépendances concernées, c'est peut être ça les paquets à mettre à jour ?

Résultats de npm audit

Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.5 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-connect-proxy [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-connect-proxy > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/577
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.5 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-contrib-jst [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-contrib-jst > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/577
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.5 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-usemin [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-usemin > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/577
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.11 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-connect-proxy [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-connect-proxy > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/782
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.11 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-contrib-jst [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-contrib-jst > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/782
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.11 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-usemin [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-usemin > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/782
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.12 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-connect-proxy [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-connect-proxy > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1065
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.12 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-contrib-jst [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-contrib-jst > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1065
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.12 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-usemin [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-usemin > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1065
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Symlink Arbitrary File Overwrite │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ bower │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=1.8.8 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ bower [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ bower │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/776
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ http-proxy │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=1.18.1 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ grunt-connect-proxy [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ grunt-connect-proxy > http-proxy │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1486
└───────────────┴──────────────────────────────────────────────────────────────┘
found 11 vulnerabilities (3 low, 8 high) in 439 scanned packages
11 vulnerabilities require manual review. See the full report for details.
Messages postés
29255
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 juillet 2020
6 885
Dans
package.json
tu sembles imposer des numéros de version. Est-ce indispensable ? Est-il possible d'utiliser des >= au niveau des numéros de version (en misant sur la compatibilité ascendante), ce qui donnerait plus de flexibilité à
npm
pour trouver un jeu de paquets compatibles entre eux ?
Messages postés
36
Date d'inscription
mercredi 12 février 2020
Statut
Membre
Dernière intervention
2 juillet 2020
4
Bonjour, désolé pour le temps de réponse, j'avais pas mal à faire. Merci pour ta réponse mamiemando, ça m'a ouvert les yeux sur les méthodes pour gérer les dépendances, notamment sur les balises resolutions{} dans les fichiers .json
Finallement, le problème provient des permissions, en amont je me suis rendu compte que le module bower n'était pas installé et que ma session n'avait pas les permissions sur /usr/bin/bower. Cela implique que je risque beaucoup d'autres problèmes comme pour le server Grunt et peut être même sur mon installation du server payara/mysql/jdbc.

Ma dernière question serait: est-il possible de changer les permissions sur ma session au lieu de tout réinstaller? J'avais créer une session avec les droits super-utilisateur et désactiver le root. Mais j'ai dû mal m'y prendre quelque part. Si vous avez des idées, je suis plus que preneur.
Messages postés
29255
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 juillet 2020
6 885
Je ne sais pas trop ce que signifie session dans le cas présent. Donc je vais te répondre avec les gestionnaires de paquets que je connais :
  • apt impose d'être root pour installer des paquets, car le déploiement est global au système (donc seul root peut écrire dans les dossiers qui concernent tout le monde)
  • pip (gestionnaire de modules python) laisse le choix. Si tu es root le paquet est installé pour tout le monde. Si tu es utilisateur le paquet est installé juste pour toi. Si le paquet est installé en root et en utilisateur, c'est l'installation utilisateur qui prend le pas.
  • apt et pip permettent parfois d'installer le même module. Dans ce cas c'est le module pip qui prend le pas.


Toutes ces règles sont inhérentes aux répertoires d'installation (voir echo $PATH en shell + sys.path en python).

L'installation et l'utilisation d'un module sont orthogonales. Il n'y a pas de notion de "session" du coup je ne sais pas de quoi tu parles.
Messages postés
36
Date d'inscription
mercredi 12 février 2020
Statut
Membre
Dernière intervention
2 juillet 2020
4
Pardon, je ne suis pas encore familiarisé avec la terminologie linuxienne. Ce que j'appel session, c'est quand je me connecte sous gnome en tant qu'utilisateur ou en tant que root.

Pour mon problème de permissions, c'est que j'avais fais un test d'installation du module "bower" avec la commande
npm install bower
et que j'ai reçu le code d'erreur "permission denied sur le chemin /usr/bin/bower". J'ai ensuite mis les droits avec "chmod 777 -R /usr/bin/bower" et l'installation de "bower" a fonctionné.

Je pense donc qu'en amont de mon installation je dois avoir des problèmes, peut être sur NPM. Comme certains répertoires qui nécessite des permissions spéciales tel que "~/.npm" et "~/.config"
Messages postés
29255
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 juillet 2020
6 885
Plusieurs choses :

Le terme session sans contexte peut désigner plusieurs choses. Une session réseau, une session utilisateur, plus généralement une session vis à vis dans un logiciel.

Ce qui est sûr c'est que la commande
chmod
ne doit jamais être utilisée comme tu l'as fait. Relâcher les droits = ouvrir un trou de sécurité. Si ton utilisateur n'a pas les droits suffisants, il faut te demander pourquoi et si c'est normal. Neuf fois sur dix c'est juste qu'il s'agit d'une commande administrateur et qui requiert donc un
sudo
ou de passer root. À titre indicatif ton binaire peut n'importe être modifié par n'importe quel utilisateur connecté à ta machine et donc est un point d'attaque potentiel. Donc déjà tu devrais revenir à des droits plus raisonnables (e.g. 755).

Ensuite oui tes applications s'appuient sur des fichiers de configuration (dont le nom est prédéfini dans l'application) dans
/etc 
et dans ton dossier utilisateur (généralement de la forme
/etc/application
ou
 ~/.application
).

Du coup je te renvoie à ce que je t'expliquais sur le gestionnaire de paquets. Si celui-ci permet de faire une installation locale à un utilisateur (donc installer des paquets donc dans son home, comme le permet
pip
mais pas
apt
), pas besoin de droits root ou d'intervenir ailleurs que dans ton home. Sinon il faut sûrement être root et les paquet atterrissent à l'extérieur de ton home (voir FHS)...