宽屏模式

windows安装homstead做laravel项目,执行yarn add china-area-data 时报错引发的思考

学习 L05 Laravel 教程 - 电商实战 3.6;
执行 yarn add china-area-data 时,在第三步下载完后,报错如下:

[vagrant@homestead~/code/laravel-shop]$ yarn add china-area-data
yarn add v1.3.2
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
error An unexpected error occurred: "EPROTO: protocol error, symlink '../acorn/bin/acorn' -> '/home/vagrant/code/laravel-shop/node_modules/acorn-dynamic-import/node_modules/.bin/acorn'".
info If you think this is a bug, please open a bug report with the information provided in "/home/vagrant/code/laravel-shop/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.

想到之前安装 yarn 的时候有个需要加 --no-bin-links 的操作,随手就试一下,结果:

[vagrant@homestead~/code/laravel-shop]$ yarn add china-area-data --no-bin-links
yarn add v1.3.2
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
└─ china-area-data@4.0.0
Done in 257.58s.

好像是成功了;
emm。。。不过不太清楚其中原理;
待我了解后再做补充;
寻找答案的过程中,在 npm install --no-bin-links中的参数“no-bin-links”表示什么意思?得知:
--no-bin-links是不要创建符号链接的意思。
是为了解决 linux 下的 npm 在 ntfs 分区上运行 npm install 遇到的创建软连接失败问题引入的。
(Windows 系统的分区,它的文件系统格式不是 Linux 下的 ext3/ext4,而是 Windows 下的 vboxsf/ntfs,而 链接文件 只在 Linux 系统出现,现在要在 vboxsf/ntfs 格式的文件系统创建链接文件,当然会报错!)
(yarn与npm类似是一个包管理工具,详见 yarn与npm
了解参数的含义后,去查了下 windows下vagrant创建符号链接出错
发现一篇文章 关于vagrant与win10共享的目录无法创建软链接的问题
看完感觉会不会是 windows 权限原因?
于是,在在虚拟机与 windows 共享的目录 code 中,试着执行了一下 yarn add china-area-data
然后,报错:

APKDEV@DESKTOP-884834E MINGW64 ~/Code/laravel-shop (master)
$ yarn add china-area-data
bash: yarn: command not found

emm。。。
很尴尬,忘了yarn是在虚拟机中安装的,无法直接用 windows 的 Terminal 运行;
猜想很可能就是win10权限原因,继续查资料发现一文 让Vagrant支持在Windows的同步共享文件中创建软链接
准备去尝试着弄一下,看看是否能成;
未完待续。。。。。。
------------------------分割线--------------------------
2018年6月21日15:00:16
试着在 code 文件夹创建软连接,结果报错:

[vagrant@homestead~/code]$ ln -sf laravel-shop/ la
ln: failed to create symbolic link 'la': Protocol error

使用关键词 Protocol error
筛选搜索结果,看到一篇文章:vbox在共享文件夹设置链接报错Protocol error问题
也是类似问题,于是,尝试了一下:

  1. 添加 vbox 环境变量到 path 中;
  2. 管理员模式打开cmd;
  3. 执行命令 VBoxManage setextradata homestead-7 VBoxInternal2/SharedFoldersEnableSymlinksCreate/home_vagrant_code 1
  4. 没报错,再执行命令VBoxManage getextradata homestead-7 enumerate

    C:\WINDOWS\system32>VBoxManage getextradata homestead-7 enumerate                                                       Key: GUI/LastCloseAction, Value: SaveState                                                                              Key: GUI/LastNormalWindowPosition, Value: 281,227,800,645                                                               Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate/home_vagrant_code, Value: 1                                        Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant, Value: 1 

第三步一开始没关闭 vbox 结果报错:

C:\WINDOWS\system32>VBoxManage setextradata homestead-7 VBoxInternal2/SharedFoldersEnableSymlinksCreate/home_vagrant_code 1                                                                                                                     VBoxManage.exe: error: Code E_FAIL (0x80004005) - Unspecified error (extended info not available)                       VBoxManage.exe: error: Context: "LockMachine(a->session, LockType_Shared)" at line 802 of file VBoxManageMisc.cpp 

关闭vbox 后再执行就没问题了;

OK,在继续去创建软连接:

[vagrant@homestead~/code]$ ln -sf laravel-shop/ la
ln: failed to create symbolic link 'la': Permission denied

这次报的是权限问题,看来有希望;
再重新用 sudo 执行命令,成功创建软连接;
但是,创建完 软链接后发现,原来 code 文件夹里面的东西都不见了?
执行 vagrant reload 后就又可以了;
(这里其实花费了挺多时间去寻找原因,各种尝试);
猜测是上面执行 VBoxManage 那些命令导致的;

现在,再去项目目录执行 yarn add china-area-data
然后,成!功!了!

[vagrant@homestead~/code/laravel-shop]$ yarn add china-area-data
yarn add v1.3.2
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
warning Your current version of Yarn is out of date. The latest version is "1.7.0" while you're on "1.3.2".
info To upgrade, run the following command:
$ curl -o- -L https://yarnpkg.com/install.sh | bash
success Saved 1 new dependency.
└─ china-area-data@4.0.0
Done in 572.11s.

Larwas
请先登录后发表评论
  • latest comments
  • 总共0条评论