【问题标题】:EACCESS error when installing packages on WSL在 WSL 上安装包时出现 EACCESS 错误
【发布时间】:2020-07-06 07:06:00
【问题描述】:

我在尝试通过 VS Code 在 WSL 上 NPM INSTALL 包时遇到此错误。

npm ERR! Error: EACCES: permission denied, rename '/mnt/d/DEVRepo/PWS/functions/node_modules/cssstyle' -> '/mnt/d/DEVRepo/PWS/functions/node_modules/.cssstyle.DELETE'
npm ERR!  [OperationalError: EACCES: permission denied, rename '/mnt/d/DEVRepo/PWS/functions/node_modules/cssstyle' -> '/mnt/d/DEVRepo/PWS/functions/node_modules/.cssstyle.DELETE'] {     
npm ERR!   cause: [Error: EACCES: permission denied, rename '/mnt/d/DEVRepo/PWS/functions/node_modules/cssstyle' -> '/mnt/d/DEVRepo/PWS/functions/node_modules/.cssstyle.DELETE'] {        
npm ERR!     errno: -13,
npm ERR!     code: 'EACCES',
npm ERR!     syscall: 'rename',
npm ERR!     path: '/mnt/d/DEVRepo/PWS/functions/node_modules/cssstyle',
npm ERR!     dest: '/mnt/d/DEVRepo/PWS/functions/node_modules/.cssstyle.DELETE'
npm ERR!   },
npm ERR!   stack: "Error: EACCES: permission denied, rename '/mnt/d/DEVRepo/PWS/functions/node_modules/cssstyle' -> '/mnt/d/DEVRepo/PWS/functions/node_modules/.cssstyle.DELETE'",
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'rename',
npm ERR!   path: '/mnt/d/DEVRepo/PWS/functions/node_modules/cssstyle',
npm ERR!   dest: '/mnt/d/DEVRepo/PWS/functions/node_modules/.cssstyle.DELETE',
npm ERR!   parent: 'functions'
npm ERR! }

【问题讨论】:

    标签: npm windows-subsystem-for-linux vscode-remote


    【解决方案1】:

    问题在于 VSCode WSL 扩展锁定文件并产生错误。

    解决方法是在 VSCode 上关闭 WSL 连接 o 只需关闭整个 IDE 并再次运行 npm install 命令。

    【讨论】:

    • 还有其他可能吗?我根本没有运行 VS 代码。
    • 我还在使用 WSL 的第 1 版。升级到 WSL 2 后一切正常。我从 powershell 运行这个:wsl --set-version <distribution name> <versionNumber> 即wsl --set-version Ubuntu 2
    【解决方案2】:

    您可以通过允许不安全的权限来修复该错误

    npm config set unsafe-perm=true
    npm install
    

    https://github.com/microsoft/WSL/issues/14#issuecomment-207504657

    【讨论】:

      【解决方案3】:
      • 在线下载“package-version.vsix”
      • 将“package-version.vsix”重命名为“package-version.zip”
      • 创建目录/home/user/.vscode-server/extensions/package-version
      • 将内容解压到“package-version.zip”
      • 将解压缩的 zip 存档的“extension”文件夹的内容移动到 /home/user/.vscode-server/extensions/package-version
      • 连接到 wsl,现在它将被安装

      【讨论】:

        【解决方案4】:

        终于找到混合多个答案来升级npm的方法了:

        • 运行 powershell 然后更改 wsl 分发版本
        # List available distribution
        PS C:\Users\CallMarl> wsl.exe -l
        Debian (par défaut)
        # set version to 2
        PS C:\Users\CallMarl> wsl.exe --set-version Debian 2
        
        • 运行 wsl 然后安装最新版本
        PS C:\Users\CallMarl> wsl.exe -d Debian
        callmarl@LAPTOP ~ % sudo npm install -g npm@latest
        
        • 然后检查 npm 版本
        callmarl@LAPTOP ~ % npm -v
        7.20.3
        
        • 出于某种原因,您可以通过在 powershell wsl.exe --set-version Debian 1 中运行来回滚到 WSL 1

        【讨论】:

          【解决方案5】:

          由于 wsl 不允许在没有 sudo 的情况下对 /usr/lib/node_modules 进行写操作,我们可以使用以下命令重新映射 node_modules 的安装位置。

          mkdir ~/.npm-new
          npm config set prefix '~/.npm-new'
          export PATH=~/.npm-new/bin:$PATH
          source ~/.profile
          

          https://cmatskas.com/resolve-npm-access-denied-errors/

          【讨论】:

            猜你喜欢
            • 2021-03-15
            • 2020-10-24
            • 2015-04-27
            • 2019-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-28
            相关资源
            最近更新 更多