npm ERR!EPROTO:协议错误,符号链接'../@babel/parser/bin/babel-parser.js'->'/home/vagrant/code/proadco.test/node_modules/.bin/parser'

Spe*_*ill 3 windows node.js npm

我试图npm install在Windows 8.1的Git Bash客户端中执行,但收到以下错误:

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: minimist@1.2.0 (node_modules/fsevents/node_modules/rc/node_modules/minimist):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: no such file or directory, open '/home/vagrant/code/proadco.test/node_modules/fsevents/node_modules/rc/node_modules/minimist/package.json.737544774'

npm ERR! path ../@babel/parser/bin/babel-parser.js
npm ERR! code EPROTO
npm ERR! errno -71
npm ERR! syscall symlink
npm ERR! EPROTO: protocol error, symlink '../@babel/parser/bin/babel-parser.js' -> '/home/vagrant/code/mysite.test/node_modules/.bin/parser'

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vagrant/.npm/_logs/2019-06-24T02_39_32_641Z-debug.log
Run Code Online (Sandbox Code Playgroud)

运行npm install --no-bin-links允许它成功运行。但是我不完全了解此操作的后果。我相信这是在说:“不要创建符号链接。这只是一个hack,而不是解决问题的根源。但是我读过Windows不支持符号链接,因此无法解决。

有人可以解释这里的后果吗?也许如何克服符号链接的根本问题?

Hir*_*ren 9

如果您希望 npm 停止为您创建符号链接,您可以通过以下方式避免这种情况

npm install --no-bin-links
Run Code Online (Sandbox Code Playgroud)

有关 npm 文档的更多信息https://docs.npmjs.com/cli/install.html

注意:这可能会产生一些未知的副作用,这种方法适用于我正在处理的应用程序以及当我遇到此问题时。副作用可能与 npm 试图创建的符号链接有关,并且在开发的后期阶段它发现符号链接不可用。


小智 5

什么工作对我来说是启动Windows命令提示符作为管理员,并vagrant up从那里。

问题是,作为主机的Windows需要管理员权限才能创建symlinks

为了摆脱以前的不成功安装,我运行npm clean-install npm run dev仍然会出现一些错误,但是ui:auth可以正常工作。


Mar*_*lio 5

对于 Windows 主机

这个简单的解决方案可以排除node_modules文件夹与 vagrant 默认同步提供程序(不是 rsync 也不是 nfs)同步。

只需vagrant ssh进入您的 gest 机器并执行以下命令:

$ mkdir ~/project_node_modules
$ sudo mount --bind ~/project_node_modules /home/vagrant/code/project/node_modules
Run Code Online (Sandbox Code Playgroud)

不适用于 Windows 主机

警告!您需要rsync在主机和来宾机器上!

我发现可以排除node_modules文件夹与 Windows 文件系统同步,以避免符号链接问题

在 Homestead 中,Vagrantfile此行将激活对您选择的文件夹的 Rsync 支持,但不包括右侧的node_modules文件夹:

config.vm.synced_folder "C:\\path\\to\\project", "/home/vagrant/path/to/project", type: "rsync", :mount_options => ["dmode=777", "fmode=666"], rsync__exclude: ['node_modules/']
Run Code Online (Sandbox Code Playgroud)

如果听起来很困难,您可以按照配置共享文件夹中的 Homestead 文档将其放入您的Homestead.yaml文件中:

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]
Run Code Online (Sandbox Code Playgroud)

现在,运行命令npm install将能够安装所有项目依赖项,并且命令npm run dev将能够正确生成混合清单。