在Vagrant框中安装NVM / NodeJs / EmberJS

我对此有种种乐趣。

最初的问题是terminal需要在安装NVM之后重新启动,以便我可以用.bashrc设置重新初始化,然后安装NodeJS – 所以我的想法是我将构build一个已经安装了NVM的基础盒子。 这样的terminal将已经初始化与NVM的东西。

不是这样…显然使用Vagrant封装一个basebox会忽略/ home / vagrant文​​件夹中的所有内容。 ARRRRRRRGGGGHHHHH!

真的吗?!-1-酮

有没有人有这个运气? 将NVM安装在stream浪箱内? 甚至没有sudo NodeJs? 这是一个可怕的兔子洞atm我想出去!

我build议你回到shellconfiguration策略,我也用这个去了地狱,但肯定是可行的。 经过大量的谷歌search,我发现有两个非常模糊的logging设置,你需要这个工作:

首先也是最重要的部分是,你需要在你的config.vm.provider块上用这行在VirtualBox实例上启用符号链接,没有这个NVM就不会工作(看这里 ):

 config.vm.provider "virtualbox" do |vb| # (...) vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant","1"] end 

接下来,您必须将供应脚本分为两部分,一部分以root身份运行正常的apt / git /任何内容……另一部分将作为默认的'vagrant'用户运行:

 $rootScript = <<SCRIPT # some rooty stuff (just don't forget to include git and curl here) SCRIPT ## This is the script that will install nvm as the default 'vagrant' user $userScript = <<SCRIPT cd /home/vagrant # Installing nvm wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh # This enables NVM without a logout/login export NVM_DIR="/home/vagrant/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm # Install a node and alias nvm install 0.10.33 nvm alias default 0.10.33 # You can also install other stuff here npm install -g bower ember-cli SCRIPT 

最后,你需要告诉vagrant使用用户权限运行第二个脚本(几乎完全没有文档):

 config.vm.provision "shell", inline: $rootScript config.vm.provision "shell", inline: $userScript, privileged: false 

这应该做的。 不漂亮,但它的作品。

看看这个工作的要点 ,祝你好运!