在Vagrant框中安装NVM/NodeJs/EmberJS

5 node.js vagrant ember.js nvm

我有各种各样的乐趣.

最初的问题是终端需要在安装NVM后重新启动,以便我可以使用.bashrc设置重新初始化然后安装NodeJS - 所以我的想法是我将构建一个已经安装了NVM的基本盒.这样终端就已经初始化了NVM的东西.

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

真的吗?!-1-酮

有人有运气吗?将NVM安装在流浪盒内?甚至没有sudo的NodeJ?这是一个可怕的兔子洞,我想出去!

小智 18

我建议你回到shell配置策略,我也已经通过这个地狱,但绝对可行.经过大量的谷歌搜索后,我发现有两个非常含糊的文档设置需要它才能工作:

首先,也是最重要的部分是你需要在你的config.vm.provider块上使用这一行在VirtualBox实例上创建符号链接,而这个NVM不会起作用(请看这里):

config.vm.provider "virtualbox" do |vb|

  # (...)

  vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant","1"]
end
Run Code Online (Sandbox Code Playgroud)

接下来,您必须将配置脚本分为两部分,一部分将以普通的apt/git /以及root用户身份运行...而另一部分将作为默认的'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
Run Code Online (Sandbox Code Playgroud)

最后,您需要告诉vagrant仅使用用户权限运行第二个脚本(这里几乎完全没有记录):

config.vm.provision "shell", inline: $rootScript
config.vm.provision "shell", inline: $userScript, privileged: false
Run Code Online (Sandbox Code Playgroud)

那应该做.不漂亮,但它的工作原理.

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

  • 嘿! 谢谢-我最终只是建立了一个安装了它的底盒。我确实尝试过使用privileged进行类似的操作:false-但永远不会获得setextradata部分!我将尝试这种解决方案-我简直不敢相信它太忙了! (2认同)
  • 希望我能对此投票100次。谢谢!这真令人沮丧。 (2认同)