5

我对此感到很开心。

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

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

真的吗?!!1个

有没有人有这方面的运气?将 NVM 安装在 vagrant box 中?甚至没有 sudo 的 NodeJs?这是一个可怕的兔子洞自动取款机,我想出去!

4

1 回答 1

20

我建议你回到 shell 配置策略,我也经历过这个,但绝对是可行的。经过大量谷歌搜索后,我发现您需要两个非常模糊的文档设置才能使其正常工作:

首先也是最重要的部分是,您需要在config.vm.provider块上的这条线上启用在 VirtualBox 实例上创建符号链接,没有这个 NVM 就无法工作(看这里):

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

  # (...)

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

接下来,您必须将您的配置脚本分为两部分,一个将以 root 身份运行普通的 apt/git/whatever 东西......另一个将以默认的“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

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

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

于 2014-12-11T17:48:02.180 回答