Node.js 安装npm模块时权限被拒绝

Node.js 安装npm模块时权限被拒绝,node.js,npm,module,file-permissions,Node.js,Npm,Module,File Permissions,我在尝试安装npm模块时遇到了一个奇怪的权限错误。我从sudo开始,所以我肯定我有访问权限,但出于某种原因,它不断抱怨错误: 堆栈错误:EACCES:权限被拒绝,mkdir'/usr/lib/node_modules/joplin/node_modules/sqlite3/build' 我尝试重新启动计算机,并使用chmod 777创建一个目录/usr/lib/node\u modules/joplin,但仍然不起作用 $ sudo npm install -g joplin /usr/bin/

我在尝试安装npm模块时遇到了一个奇怪的权限错误。我从
sudo
开始,所以我肯定我有访问权限,但出于某种原因,它不断抱怨错误:

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

我尝试重新启动计算机,并使用chmod 777创建一个目录
/usr/lib/node\u 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安装-g joplin
/usr/bin/joplin->/usr/lib/node_modules/joplin/main.js
> sqlite3@3.1.9安装/usr/lib/node_modules/joplin/node_modules/sqlite3
>节点预gyp安装--回退到构建
节点前gyp错误!试图下载(未定义):https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.9/node-v48-linux-x64.tar.gz
节点前gyp错误!找不到的预构建二进制文件sqlite3@3.1.9及node@6.11.2(node-v48 ABI)(使用节点gyp返回到源代码编译)
哎呀!配置错误
哎呀!堆栈错误:EACCES:权限被拒绝,mkdir'/usr/lib/node_modules/joplin/node_modules/sqlite3/build'
哎呀!堆栈出错(本机)
哎呀!系统Linux 4.4.0-43-Microsoft
哎呀!命令“/usr/bin/nodejs”“/usr/lib/node_modules/npm/node_modules/node gyp/bin/node gyp.js”“configure”“--回退到构建”“--module=/usr/lib/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!节点-v6.11.2
gyp ERR!节点gyp-v3.6.2
哎呀!不行
节点预gyp错误!生成错误
node pre-gyp ERR!堆栈错误:未能执行“/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--modules--Ø模块名=nodeØ-sqlite3--模块路径=/usr/lib/nodeØ模块s/sqlite3/lib/binding/node-v48-linux-x64'(1)
node pre-gyp ERR!在ChildProcess上堆栈。(/usr/lib/node_modules/joplin/node_modules/sqlite3/node_modules/node pre-gyp/lib/util/compile.js:83:29)
emitTwo上的节点pre-gyp ERR!堆栈(events.js:106:13)
ChildProcess.emit(events.js:191:7)处的节点前gyp ERR!堆栈
maybeClose处的节点预gyp ERR!堆栈(internal/child_process.js:891:16)
node pre-gyp ERR!在Process.ChildProcess.\u handle.onexit(internal/child\u 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”“安装”“--回退到构建”
node pre-gyp ERR!cwd/usr/lib/node_modules/joplin/node_modules/sqlite3
节点前gyp错误!节点-v6.11.2
节点预gyp错误!节点预gyp-v v0.6.36
节点预gyp错误!不正常
编辑


我也尝试过sudo npm I sqlite3-g——从源代码构建,但得到了相同的错误:EACCES:permission denied,mkdir'/usr/lib/node\u modules/sqlite3/build',所以这似乎与sqlite3有关。

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

sudo chown -R $(whoami) ~/.npm
并且需要节点_modules目录中的写入权限:

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

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

命令


sudo chmod 777-R node_modules/

我学到的一条经验法则是永远不要用sudo运行
npm install
。这会创建以
root
作为所有者而不是用户名的项目


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

什么是$(whoami)?whoami是指显示当前登录用户和$(whoami)的linux命令为您提供命令的输出。“我是谁”命令回答有关生活的哲学问题。全局npm目录可能与您的情况不同。出于某种原因,您不妨尝试在
/usr/local/lib/node_模块上运行该命令,但在这些命令执行
sudo npm I
后失败,并出现相同的错误,但没有sudo
-它可以工作!