【问题标题】:npm ERR! EPROTO: protocol error, symlink '../@babel/parser/bin/babel-parser.js' -> '/home/vagrant/code/proadco.test/node_modules/.bin/parser'npm 错误! EPROTO:协议错误,符号链接 '../@babel/parser/bin/babel-parser.js' -> '/home/vagrant/code/proadco.test/node_modules/.bin/parser'
【发布时间】:2019-11-05 19:57:43
【问题描述】:

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

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

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

有人能解释一下这里的后果是什么吗?以及如何克服符号链接的根本问题?

【问题讨论】:

  • 符号链接在 Windows 上受支持。您是否以管理员身份运行?

标签: node.js windows npm


【解决方案1】:

对我有用的是从那里以 Administratorvagrant up 身份启动 Windows 命令提示符。

如果 Vagrant 已经在运行,您需要在新启用管理员的命令提示符中运行 vagrant suspend 之前的 vagrant up

问题在于Vagrant 进程需要管理员权限才能创建symlinks

为了摆脱以前不成功的安装,我运行了npm clean-installnpm run dev 仍然会出现一些错误,但 ui:auth 有效。

【讨论】:

  • 这对我有用。感谢您提供有关“全新安装”的提示,否则我仍然会收到其他错误
  • 这也适用于 Vagrant - 非常清楚 - 我需要以管理员身份运行 windows 命令提示符,然后运行 ​​vagrant up/vagrant reload。之后 ssh 进入 vagrant 并运行我的 npm 命令。
  • 在运行 npx create-react-app . 时出现 EPROTO 错误。
  • 这对我也有用!谢谢!!
【解决方案2】:

如果您希望 npm 停止为您创建符号链接,您可以通过

来避免这种情况
npm install --no-bin-links

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

注意:这可能有一些未知的副作用,此方法有效 对于我正在开发的应用程序来说很好,当我遇到这个时 问题。副作用可能与符号链接有关,npm 是 试图创造,并在开发的后期发现 符号链接不可用。

【讨论】:

  • 只是一个小提示:这有可能破坏构建。某些软件包不适用于此选项。
  • @JellyFilledNuts 是的,先生,曾用小便条提到过:)
【解决方案3】:

对于 Windows 主机

This easy solution 可以排除 node_modules 文件夹与 vagrant 默认同步提供程序(不是 rsync 或 nfs)同步。

只需将vagrant ssh 放到您的 gest 机器上并执行以下命令:

$ mkdir ~/project_node_modules
$ sudo mount --bind ~/project_node_modules /home/vagrant/code/project/node_modules

不适用于 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/']

如果这听起来很困难,您可以通过 Configuring Shared Folder 关注 Homestead 文档,将其放入您的 Homestead.yaml 文件中:

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]

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

【讨论】:

    【解决方案4】:

    对我有用的是这个。在我使用的 Homestead 环境中:

    sudo su
    

    然后再次运行

    npm install
    

    【讨论】:

      【解决方案5】:

      我与这个案例斗争了好几天,最后我“使用 IDE”安装了所有节点模块依赖项及其修复

      【讨论】:

        猜你喜欢
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 2016-09-05
        • 2021-12-22
        • 2021-07-29
        • 2020-06-29
        • 1970-01-01
        • 2017-07-14
        相关资源
        最近更新 更多