【问题标题】:Permission denied when installing npm module安装 npm 模块时权限被拒绝
【发布时间】:2018-01-13 05:19:18
【问题描述】:

我在尝试安装 npm 模块时遇到一个奇怪的权限错误。我以sudo 开头,所以我确定我确实可以访问,但由于某种原因它一直抱怨错误:

堆栈错误:EACCES:权限被拒绝,mkdir '/usr/lib/node_modules/joplin/node_modules/sqlite3/build'

我试过重启我的电脑,并用 chmod 777 创建了一个目录/usr/lib/node_modules/joplin,但还是不行。

$ sudo npm install -g joplin
/usr/bin/joplin -> /usr/lib/node_modules/joplin/main.js

> sqlite3@3.1.9 install /usr/lib/node_modules/joplin/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

node-pre-gyp ERR! Tried to download(undefined): https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.9/node-v48-linux-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for sqlite3@3.1.9 and node@6.11.2 (node-v48 ABI) (falling back to source compile with node-gyp)
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/joplin/node_modules/sqlite3/build'
gyp ERR! stack     at Error (native)
gyp ERR! System Linux 4.4.0-43-Microsoft
gyp ERR! command "/usr/bin/nodejs" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64"
gyp ERR! cwd /usr/lib/node_modules/joplin/node_modules/sqlite3
gyp ERR! node -v v6.11.2
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute '/usr/bin/nodejs /usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node --module_name=node_sqlite3 --module_path=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/joplin/node_modules/sqlite3/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack     at emitTwo (events.js:106:13)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:191:7)
node-pre-gyp ERR! stack     at maybeClose (internal/child_process.js:891:16)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
node-pre-gyp ERR! System Linux 4.4.0-43-Microsoft
node-pre-gyp ERR! command "/usr/bin/nodejs" "/usr/lib/node_modules/joplin/node_modules/sqlite3/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /usr/lib/node_modules/joplin/node_modules/sqlite3
node-pre-gyp ERR! node -v v6.11.2
node-pre-gyp ERR! node-pre-gyp -v v0.6.36
node-pre-gyp ERR! not ok

编辑

我也试过sudo npm i sqlite3 -g --build-from-source,但得到了同样的错误Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/sqlite3/build',所以它似乎与sqlite3有关。

【问题讨论】:

    标签: node.js npm module file-permissions


    【解决方案1】:

    根据我的经验,永远不要使用 sudo 运行 npm install。这会创建以 root 为所有者而不是您的用户名的项目。

    最好将目录的所有权更改为您的用户名。 $(whoami)

    【讨论】:

      【解决方案2】:

      授予节点模块文件夹的完全权限

      命令

      sudo chmod 777 -R node_modules/

      【讨论】:

        【解决方案3】:

        您需要收回 .npm 目录的所有权。

        sudo chown -R $(whoami) ~/.npm
        

        并且需要node_modules目录的写权限:

        sudo chown -R $(whoami) /usr/lib/node_modules
        

        【讨论】:

        • 什么是 $(whoami)?
        • whoami 是指显示当前登录用户的 linux 命令,$(whoami) 为您提供命令的输出。
        • 我指挥谁回答有关生活的哲学问题。
        • 全局 npm 目录在您的情况下可能会有所不同。您不妨尝试在/usr/local/lib/node_modules 上运行命令
        • 由于某种原因,在执行这些命令后 sudo npm i 失败并出现相同的错误,但没有 sudo - 它可以工作!
        猜你喜欢
        • 2018-01-19
        • 2019-01-28
        • 2019-10-18
        • 1970-01-01
        • 2018-06-15
        • 2019-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多