Nodejs + npm, installation de modules sur la partition ntfs

j'ai un problème lors de l'installation de modules npm. NodeJS est installé sur Ubuntu 11.10 en cours d'exécution sur la boîte virtuelle sur Windows host. Mes fichiers de projet sont sur la partition NTFS (je dois les partager avec windows). Lorsque j'essaie d'installer le module npm j'obtiens une erreur, et le module n'est pas installé. J'ai découvert ce problème se produit lorsque mnp essaie de créer des liens symboliques.

probablement vous ne pouvez pas créer de liens symboliques sur la partition NTFS, quand j'installe le module" inside " Linux système de fichiers, tout fonctionne bien.

Comment puis-je réparer ça? Je ne veux pas résoudre les dépendances manuellement: /

35
demandé sur Benjamin 2011-11-22 23:45:00

7 réponses

depuis la version 1.2.21, npm a une nouvelle option pour la commande install . --no-bin-links

vous pouvez utiliser si pour l'installation d'un module de noeud spécifique

npm install express --no-bin-links

et aussi pour un paquet.json installer

npm install --no-bin-links

avec cette option, j'ai été en mesure d'installer de nombreux modules npm sans problème dans mon forlder partagé à l'intérieur de la VM (Ubuntu guest, Windows Host)

Le commettre, où l'option a été ajouté au Code npm est b4c58617039c21c10889a9869f8e86a23e17d3a0

55
répondu blackjid 2013-03-01 15:45:09

essayez ceci - http://ahtik.com/blog/2012/08/16/fixing-your-virtualbox-shared-folder-symlink-error/

marche pour moi!

en gros, vous définissez un paramètre

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

et ensuite exécuter la VM en tant qu'administrateur....

5
répondu Mahbub 2013-03-07 09:33:06

les permissions de Symlink, ou le --no-bin-links ne fonctionnaient pas pour nous. Au lieu de cela, nous avons opté pour déplacer notre node_modules de la part /vagrant . Nous avons créé un lien symbolique de /vagrant/node_modules à /tmp/node_modules . vous ne pouvez le faire que si votre node_modules n'est pas dans le contrôle de version . Cochez ce en premier!

Voir aussi http://kmile.nl/post/73956428426/npm-vagrant-and-symlinks-on-windows

5
répondu Kamiel Wanrooij 2014-01-20 16:38:29

je suis assez certain que les liens symboliques ne peuvent pas être créés sur le disque partagé ("dossier partagé"). Encore plus impossible avec une machine hôte Windows et un invité Linux.

les machines host ne connaissent pas le système de fichiers des guests . Une machine invitée est une boîte noire pour l'hôte. Vous ne pouvez pas dire à l'hôte "Eh bien ce lien vers /etc/... quand l'hôte ne sait pas où cela /etc être.):

Donc, en bref: malheureusement non.


plus en détail:

, je serais vraiment heureux si je me trompe! C'est une grande douleur dans mon processus de développement.

j'ai essayé tellement d'options. Par défaut, le système de fichiers que le "dossiers partagés" utiliser est vboxsf , quelque chose sinon le même que samba (protocole de partage de réseau par défaut pour windows) so:

  1. j'ai essayé d'utiliser partage de réseau Windows natif et puis montage du lecteur réseau dans l'invité que l'invité et l'hôte sont sur le même réseau. Le problème était toujours là .
  2. j'ai essayé l'exécution d'un serveur NFS sous windows (Hanewin NFS Server) avec SFU/SUA (Windows Services for UNIX), mais cela a des problèmes avec GIT verrous . Probablement d'autres problèmes aussi bien - il y a un certain temps et je ne me souviens pas clairement
  3. j'ai essayé l'inverse: partager un répertoire sur la machine virtuelle vers windows. Mais c'est stupide que tous les fichiers seront sur la boîte virtuelle et est reaally lent à accéder sur windows
  4. j'ai été stupide et je l'ai bien " eh bien nous allons monter un lecteur virtuel sur windows et linux" - ne pas essayer, corrompt le disque virtuel. Quelque chose que je devrait l'avoir connu.

il pourrait y avoir un protocole de partage de réseau Autre que samba et nfs qui copiera peut-être les fichiers chaque fois que la création d'un" lien symbolique " est tentée? Je ne sais pas vraiment.

cependant je n'ai pas encore trouvé un et aussi "verrouillage semble être une tâche de la le système de fichiers lui-même donc je doute que n'importe quel protocole de réseau (à moins d'avoir un registre dédié d'une sorte pour les serrures) peut faire cela.

3
répondu antitoxic 2012-09-30 11:55:46

pour toute personne ayant encore ce problème après avoir essayé npm install --no-bin-links .

Je n'ai pas été en mesure d'obtenir l'une des solutions ci-dessus pour fonctionner quand je suis tombé sur un problème similaire tournant npm install sur une boite vagabonde Homestead Laravel sur un hôte Windows 7 en utilisant VirtualBox. Le guest box a un répertoire mappé vers le système de fichiers Windows.

le problème a causé divers messages d'erreur et des installations de paquets défectueuses. Celui qui est le plus pertinent à la question était npm ERR! UNKNOWN, symlink '<some filename>' .

pour corriger cela, j'ai pu exécuter avec succès npm install sur la ligne de commande de Git bash sous Windows plutôt que bash sous Linux invité.

pour ce faire, vous aurez besoin d'installer Git pour Windows et NodeJS (tous les deux sur votre Windows box).

par exemple

  1. Installer Chocolaté https://chocolatey.org/
  2. choco install nodejs.install
  3. choco install git.install
  4. Exécuter C:\Program Files (x86)\Git\Git Bash.vbs
  5. dans la ligne de commande Git Bash, changez le répertoire pour l'emplacement de votre paquet.fichier json p.ex. cd /c/projects/projectname
  6. Exécuter npm install

tout semble s'installer avec succès.

1
répondu user679744 2015-07-07 08:18:33

si vous n'utilisez pas de modules natifs (compilés à partir de C/C++), vous pouvez simplement utiliser npm sur votre VM Ubuntu et copier le dossier node_modules sur Windows drive.

0
répondu muffel 2012-04-16 20:52:32

fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L: 1

cette commande active les liens symboliques sur windows. pour une meilleure explication des commandes cryptiques à la fin de la visite: Comment puis-je surmonter le "le lien symbolique ne peut pas être suivi parce que son type est désactivé."erreur lors de l'obtention de la cible d'un lien symbolique sur le Serveur 2008?

en résumé

les codes de comportement pour le comportement du fsutil l'évaluation systématique-à savoir L2L, L2R, R2L et R2R-signifie ce qui suit:

l signifie "Local", et R signifie "éloigné" (qui l'aurait cru?) Le PREMIER L ou R - avant le 2 - fait référence à l'emplacement du lien lui-même (par opposition à sa cible) par rapport à la machine accédant au lien. Le second L ou R - après le 2 - fait référence à l'emplacement de la cible du lien par rapport à la machine où le lien lui-même est situé.

0
répondu newtexie 2017-05-23 12:33:54