gpt4 book ai didi

node.js - npm 的 Vagrant 文件系统问题

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:29 26 4
gpt4 key购买 nike

我一直遇到 Vagrant 机器和 npm 的问题。文件系统中的文件突然变为只读。在所有情况下,都涉及一个包含 Git 存储库的同步目录。

以下是一个配置设置,使我能够遇到问题。这两个文件都位于面向 Node 的 Git 存储库的根目录中,例如 found here.

Vagrant 文件

# 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|
# Use host's SSH keys
config.ssh.forward_agent = true

# Get current directory name (presumably, repo dirname)
repo_dirname = File.basename(Dir.getwd)

# Set US locale
ENV['LC_ALL']="en_US.UTF-8"

# Ensures virtualbox can create symlinks in shared folders
config.vm.provider "virtualbox" do |vb|
vb.customize ["setextradata", :id,
"VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end

# Forward usual dev port through to host machine
config.vm.network :forwarded_port, guest: 3000, host: 3000
# Also forward production port just in case
config.vm.network :forwarded_port, guest: 80, host: 8080
# Forward a folder for the repo so that code can be worked on from outside the
# VM as usual
config.vm.synced_folder ".", "/home/ubuntu/#{repo_dirname}", create: true

config.vm.define "#{repo_dirname}-vm" do |repo_vm|
repo_vm.vm.box = "ubuntu/xenial64"
repo_vm.vm.host_name = "#{repo_dirname}-vm"
repo_vm.vm.provision :shell do |sh|
sh.path = "vagrant_provision.sh"
sh.privileged = false
sh.env = {
REPO_DIR: repo_dirname
}
end
end

end

vagrant_provision.sh

#!/usr/bin/env bash

function set_locale() {
sudo locale-gen en.US
}

function get_builds() {
sudo apt-get update &&
sudo apt-get upgrade -y &&
sudo apt-get install -y curl build-essential
}

function get_n_installer() {
if [ -f n-install ]
then
echo "n installer already exists. Not downloading."
return 0
else
echo "n installer not found. Downloading..."
wget -L https://git.io/n-install
fi
}

function install_n() {
if [ -d "n" ]
then
echo "n install directory already exists. Not installing."
return 0
else
echo "n install directory not found. Installing..."
yes | bash n-install
fi
}

function add_github_keys() {
# Adds the github server key to known hosts
ssh-keyscan github.com >> ~/.ssh/known_hosts &&
return 0 || return 1
}

function add_n_to_path() {
# Added by n-install, but ignored by vagrant
export N_PREFIX="$HOME/n";
[[ :$PATH: == *":$N_PREFIX/bin:"* ]] || PATH+=":$N_PREFIX/bin"
}

function get_repo() {
if [ -d "$2" ]
then
echo "Destination directory $2 already exists. Deleting contents..."
rm -rfv ./$2
fi
echo "Cloning $1 into $2..."
git clone $1 $2
}

function install_npm_deps() {
echo "Installing npm dependencies..."
npm install
}

function rebuild_node_sass() {
# Needed because of https://github.com/sass/node-sass/issues/1579
npm rebuild node-sass
}

# . ~/.bashrc &&
set_locale &&
add_github_keys &&
get_builds &&
get_n_installer &&
install_n &&
add_n_to_path &&
cd $REPO_DIR &&
install_npm_deps &&
rebuild_node_sass &&
echo "Provisioned user is: $USER" &&
echo "Frontend provisioned. To run, type 'vagrant ssh'."

似乎导致问题的主要步骤是非特权供应者执行 npm install。有时an archive unpacking error发生,但其他时候,npm 失败并出现 ENOENT 错误。

在使用 vagrant ssh 登录以完成作业时,出现只读文件系统错误。尽管如此,系统上仍有足够的空间(例如,剩余 8GB 中的 7 个)。

webpack server在同样情况下运行也会出现只读文件系统错误。

有很多问题和票据引用了类似的错误,但我还没有看到对底层机制是什么的任何探索。怎么回事?

最佳答案

我设法通过在/vagrant 共享文件夹之外符号链接(symbolic link) node_modules 来解决这个问题,即/home/vagrant/node_modules:

mkdir /home/vagrant/node_modules
ln -sf /home/vagrant/node_modules /vagrant/

这样做的缺点是您不能再在 vagrant 外部安装 npm,只能从内部安装(除非您在主机上 mkdir/vagrant)。

关于node.js - npm 的 Vagrant 文件系统问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41601417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com