在Vagrant框中安装NVM / NodeJs / EmberJS

时间:2014-11-25 08:59:48

标签: node.js ember.js vagrant nvm

我有各种各样的乐趣。

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

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

真的?!! -1-酮

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

1 个答案:

答案 0 :(得分:16)

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

首先,最重要的部分是您需要在config.vm.provider块上使用此行在VirtualBox实例上创建符号链接,而此NVM不会起作用(查看here):

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

  # (...)

  vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant","1"]
end

接下来,您必须将您的配置脚本分为两部分,一部分将以普通的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

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

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

应该这样做。不漂亮,但它有效。

在这里查看此working gist,祝你好运!