NPM/Cordova权限错误:EACCES:权限被拒绝,scandir

jsk*_*dd3 5 linux macos file-permissions npm cordova

当我运行时,cordova plugin add cordova-plugin-geolocation我收到以下错误.我已尝试在此文件夹上启用777,将自己设置为所有者等.在这些情况下我不允许使用sudo,但我相信如果可以,那将解决问题.

Failed to install 'cordova-plugin-geolocation': Error: EACCES: permission denied, scandir '/Users/username/documents/core/myapp/app/platforms/ios/build/device/libCordova.a'
    at Error (native)
    at Object.fs.readdirSync (fs.js:952:18)
    at GlobSync._readdir (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:275:41)
    at GlobSync._readdirInGlobStar (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:254:20)
    at GlobSync._readdir (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:263:17)
    at GlobSync._processReaddir (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:135:22)
    at GlobSync._process (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:130:10)
    at GlobSync._processGlobStar (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:360:10)
    at GlobSync._process (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:128:10)
    at GlobSync._processGlobStar (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:363:10)
Error: EACCES: permission denied, scandir '/Users/username/documents/core/myapp/app/platforms/ios/build/device/libCordova.a'
Run Code Online (Sandbox Code Playgroud)

Kon*_*dal 9

NPM问题

您可以使用以下三个选项之一解决此问题:

  1).Change the permission to npm's default directory.
  2).Change npm's default directory to another directory.
  3).Install node with a package manager that takes care of this for you.
Run Code Online (Sandbox Code Playgroud)

您应该在继续前进之前备份计算机.

选项1:将权限更改为npm的默认目录

1).找到npm目录的路径:

    npm config get prefix
Run Code Online (Sandbox Code Playgroud)

对于许多系统,这将是/ usr/local.

警告:如果显示的路径只是/ usr,请切换到选项2,否则您将弄乱您的权限.

2).将npm目录的所有者更改为当前用户的名称(您的用户名!):

  sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
Run Code Online (Sandbox Code Playgroud)

这会更改npm和其他一些工具(lib/node_modules,bin和share)使用的子文件夹的权限.

选项2:将npm的默认目录更改为另一个目录

有时您不想更改npm使用的默认目录(即/ usr)的所有权,因为这可能会导致一些问题,例如,如果您与其他用户共享系统.

相反,您可以配置npm以完全使用不同的目录.在我们的例子中,这将是我们的主文件夹中的隐藏目录.

1).为全局安装创建一个目录:

 mkdir ~/.npm-global
Run Code Online (Sandbox Code Playgroud)

2).配置npm使用新的目录路径:

 npm config set prefix '~/.npm-global'
Run Code Online (Sandbox Code Playgroud)

3).打开或创建一个〜/ .profile文件并添加以下行:

 export PATH=~/.npm-global/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

4).回到命令行,更新你的系统变量:

 source ~/.profile
Run Code Online (Sandbox Code Playgroud)

测试:在不使用sudo的情况下全局下载软件包.

 npm install -g jshint
Run Code Online (Sandbox Code Playgroud)

您可以使用相应的ENV变量(例如,如果您不想修改〜/ .profile),而不是步骤2-4:

  NPM_CONFIG_PREFIX=~/.npm-global
Run Code Online (Sandbox Code Playgroud)

选项3:使用包管理器为您处理此问题.

如果您在Mac OS上进行全新的节点安装,则可以使用Homebrew包管理器完全避免此问题.Homebrew使用正确的权限开箱即用.

  brew install node
Run Code Online (Sandbox Code Playgroud)