Installation de NodeJS avec le shell shell approvisionneur ne fonctionne pas

J’essaie d’installer node.js et certains paquets via Vagrant et le shell provisioner.

Je trouve trois cas:

1- Simple vagrant up et introduction manuelle des commandes une fois à l’intérieur du vagrant ssh

  • Celui-ci fonctionne parfaitement, c’est pourquoi je ne comprends pas pourquoi les 2 prochains cas ne

2- Installation depuis bootstrap.sh appelé dans VagrantFile avec des privilèges: false

  • Pendant le vagrant up tout est installé (on dit même ” Now using node v0.11.14 “)

  • Une fois à l’intérieur du nœud mobile vagrant ssh , nvm et npm se trouvent dans mon dossier d’utilisateur vagrant, mais la commande de node n’est pas reconnue, ainsi que npm . nvm est reconnu mais nvm ls ne liste rien.

3- Installation depuis bootstrap.sh appelé dans VagrantFile avec les privilèges: true

  • Pendant le vagrant up tout est installé (on dit même ” Now using node v0.11.14 “)

  • node, nvm et npm sont installés dans le répertoire / root. node_modules se trouve dans le répertoire utilisateur vagrant.

  • Noeud de commandes et npm introuvable

Voici le contenu de VagrantFile et bootstrap.sh

VagrantFile:

 # -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "ubuntu/trusty64" config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "forwarded_port", guest: 3306, host: 8081 config.vm.provision "shell", path: "bootstrap.sh", privileged: false config.vm.synced_folder "Server", "/home/vagrant/Server" end 

bootstrap.sh

 #!/usr/bin/env bash sudo apt-get update sudo apt-get -y install build-essential libssl-dev curl https://raw.githubusercontent.com/creationix/nvm/v0.17.2/install.sh | bash source ~/.nvm/nvm.sh nvm install 0.11.14 npm install express npm install -g nodemon 

Merci!

Vous devez soit append nvm use 0.11.14 ou append nvm alias default 0.11.14 à votre script de provisioning pour que nvm sache quelle version utiliser lorsque vous exécutez une commande npm ou node.

Il vous suffit de trouver où il se trouve, vous avez toujours $ PATH:

 $vagrant@box# echo $PATH 

va vous donner quelque chose comme

 /home/vagrant/.nvm/v0.10.18/bin:/usr/local/bin:/usr/bin:/bin 

Alors essayez

 $vagrant@box# sudo su $root@box# /home/vagrant/.nvm/v0.10.18/bin/npm install -g qunit --save 

(^^ Par exemple, lorsque j’ai installé qunit, vagrant avait l’alias mais pas de permission)

Vous pourriez avoir besoin de sudo – pas une mauvaise idée pour npm de toute façon. Mon provisioning (Vagrant + ansible) utilise root pour la plupart des choses.