91 votes

Comment déployer une application Node.js avec une structure node_modules profonde sous Windows ?

J'ai rencontré un curieux problème - apparemment, certains modules Node.js ont si profond les hiérarchies de dossiers que la commande de copie de Windows (ou la commande de PowerShell Copy-Item qui est ce que nous utilisons actuellement) rencontre la fameuse erreur "path too long" lorsque le chemin est long de plus de 250 caractères.

Par exemple, voici une hiérarchie de dossiers qu'un seul module Node peut créer :

node_modules\nodemailer\node_modules\simplesmtp\node_modules\
xoauth2\node_modules\request\node_modules\form-data\node_modules\
combined-stream\node_modules\delayed-stream\...

Cela semble insensé mais c'est une réalité avec les modules Node.

Nous devons utiliser le copier-coller pendant le déploiement (nous n'utilisons pas une plateforme cible "intelligente" comme Heroku où le déploiement par Git serait une option) et c'est une limitation sérieuse sous Windows.

Il n'y a pas une commande npm ou quelque chose qui permettrait de compacter le fichier node_modules ou peut-être n'inclure que ce qui est réellement nécessaire au moment de l'exécution ? (Les modules de nœuds contiennent généralement test dossiers etc. que nous n'avons pas besoin de déployer). Avez-vous d'autres idées pour contourner ce problème ? Ne pas utiliser Windows n'est malheureusement pas une option :)

1voto

David Chelliah Points 1120

1) Pendant la construction de la version, vous pouvez empêcher Visual Studio d'analyser ces fichiers / dossiers en définissant les propriétés du dossier. comme un dossier caché (il suffit de le mettre dans node_modules). Référence : http://issues.umbraco.org/issue/U4-6219#comment=67-19103

2) Vous pouvez exclure les fichiers ou les dossiers qui sont publiés pendant le packaging en incluant le noeud XML suivant dans le fichier CsProject.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <OutputPath>bin\</OutputPath>
   <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
  <ExcludeFilesFromDeployment>File1.aspx;File2.aspx</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2</ExcludeFoldersFromDeployment>
</PropertyGroup>

1voto

zangw Points 401

J'ai trouvé une solution dans Directives Microsoft Node.js .

  • Commencez par un chemin court (par exemple c : \src )
  • > npm install -g rimraf supprimer les fichiers qui dépassent max_path
  • > npm dedupe déplace les paquets dupliqués vers le niveau supérieur
  • > npm install -g flatten-packages déplace tous les paquets au niveau supérieur, mais peut causer des problèmes de versionnement
  • Mise à niveau vers npm@3 qui tente de rendre le node_modules La hiérarchie des dossiers est extrêmement plate.
    • Livré avec Node v5
    • Ou > npm install –g npm-windows-upgrade

0voto

Jason Points 461

Il ne s'agit pas d'une solution appropriée, mais plutôt d'une solution de contournement lorsque vous êtes pressé. 7-Zip pour compresser votre dossier, déplacer le fichier compressé et le décompresser sans aucun problème.

Nous avons utilisé cette solution pour déployer une application Node.js pour laquelle il n'était pas possible de faire une installation propre de npm.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X