web-dev-qa-db-fra.com

l'installation de npm sans l'option de liens symboliques ne fonctionne pas

J'ai configuré un environnement de développement avec Windows 8 et Ubuntu comme machine virtuelle. Pour cela, j'utilise VirtualBox.

J'arrive également à créer un dossier partagé dans VirtualBox.

Dans ce dossier partagé, j'essaie de démarrer un projet avec le générateur de braises de Yeoman.

yo ember --skip-install --karma
npm install --no-bin-links

Pour installer les modules NPM j'utilise l'option "--no-bin-links" pour ne pas créer de liens symboliques. Malheureusement, j'ai encore des erreurs de création de liens symboliques ... Est-ce que j'utilise bien cette option? Là, il a un bug?

27
Bastien D

Les NPM docs sur le paramètre "--no-bin-links" disent:

empêchera npm de créer des liens symboliques pour tous les binaires que le paquet pourrait contenir.

Ce qui empêchera simplement NPM de créer des liens dans le node_modules/.bin dossier. J'ai également cherché un moyen d'empêcher NPM de créer des liens symboliques lors de l'utilisation de npm install ../myPackage, mais ne trouve aucune solution ...

Mise à jour: L'équipe d'assistance npm a déclaré que cela reproduirait l'ancien comportement (pas de liens symboliques):

npm install $(npm pack <folder> | tail -1)

Fonctionne pour moi dans git-bash sur Windows 10.

37
TekTimmy

Cette page Stack Overflow apparaît dans les résultats de recherche Google lorsque vous essayez de résoudre le problème d'installation de modules locaux (c.-à-d. npm install ../myPackage) Et que vous ne voulez pas de liens symboliques. J'ajoute donc cette réponse ci-dessous pour vous aider d'autres qui se retrouvent ici.

Solution # 1 - Pour l'environnement de développement.

Utiliser la solution proposée par l'équipe de support NPM comme mentionné dans les autres réponses fonctionne ...

# Reproduces the old behavior of hard copies and not symlinks
npm install $(npm pack <folder> | tail -1)

C'est très bien dans l'environnement de développement pour les installations manuelles.

Solution # 2 - Pour l'environnement de construction.

Cependant, dans notre cas, l'environnement de développement n'a pas autant d'importance car, lors de la validation de nos modifications dans Git, le dossier ./node_modules/ Est de toute façon ignoré.

Les fichiers ./package.json Et ./package-lock.json Sont ce qui est important et sont transportés dans notre environnement de construction.

Dans notre environnement de construction (faisant partie de notre pipeline CI/CD automatisé), l'automatisation exécute simplement la commande npm install Et se construit à partir des dépendances répertoriées dans le fichier package.json.

Voici donc où le problème nous affecte. Les fichiers référencés localement dans la liste des dépendances du package.json Font apparaître des liens symboliques. Nous revenons maintenant à l'ancien problème. Ces liens symboliques sont ensuite transportés dans la sortie de la génération qui se déplace vers les environnements Stage et Production.

Nous avons plutôt utilisé rsync en mode archive avec l'option --copy-links Qui transforme les liens symboliques en copies de l'original.

Voici à quoi ressemble la commande dans la version automatisée:

# Install dependencies based on ./package.json
npm install

# Make a copy that changes symlinks to hard copies
rsync --archive --verbose --copy-links ./node_modules/ ./node_modules_cp/

# Remove and replace
rm -r ./node_modules/
mv ./node_modules_cp/ ./node_modules/
3
Joseph Shih

J'ai un environnement similaire. Apparemment, la synchronisation de la boîte virtuelle (vagabonde) a des problèmes lors du renommage ou du déplacement de fichiers, ce qui se produit lors de la mise à jour des modules. Si vous faites une liste de fichiers (ls -alhp) sur la ligne de commande et voyez ??? pour les autorisations de fichier, il est temps de redémarrer votre virtualbox. Cela définira les autorisations sur des valeurs valides. Utilisez ensuite l'option --no-bin-links lors de l'installation d'un module.

2
Pieter Coucke