2012-07-15 128 views
3

今天下午早些時候,我在Fedora 16不能運行NPM安裝的軟件包爲用戶

[email protected]$ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm 

[email protected]$ sudo yum install nodejs-compat-symlinks npm 

安裝的Node.js然後我安裝了一個包NPM。我用Fedora上的npm安裝的每個軟件包(這不是我第一次)包含類似以下過程的內容。讀它並哭泣。很明顯,這是一個駭人聽聞的錯誤,但是當我決定安裝更少或者其他的npm包時,我必須經歷相同的過程。爲什麼?我的環境或方法有什麼問題?

[email protected]$ sudo npm install -g jslint 
[... this works ... kind of] 

[email protected]$ jslint 
bash: jslint: command not found 

[email protected]$ sudo su 

[email protected]$ jslint 
No files specified. 
Usage: /bin/jslint ... [works] 

[email protected]$ which jslint 
/bin/jslint 

[email protected]$ ls -l jslint 
lrwxrwxrwx. 1 root root 38 Jul 15 14:58 /bin/jslint -> /lib/node_modules/jslint/bin/jslint.js 

[email protected]$ cd /lib/node_modules; ls -l 
... 
drwxr-xr-x. 2 root root  4096 Jul 15 14:22 inherits 
drwxr-xr-x. 2 root root  4096 Jul 15 14:22 ini 
drwx------. 6 nobody usergroup 4096 Jul 15 14:58 jshint 
drwxr-xr-x. 3 root root  4096 Jul 15 14:22 lru-cache 
... 

[email protected]$ find . -type d -print0 | xargs -0 chmod 755 

[email protected]$ ls -l 
... 
drwxr-xr-x. 2 root root  4096 Jul 15 14:22 inherits 
drwxr-xr-x. 2 root root  4096 Jul 15 14:22 ini 
drwxr-xr-x. 5 nobody usergroup 4096 Jul 15 15:32 jslint 
drwxr-xr-x. 3 root root  4096 Jul 15 14:22 lru-cache 
... 

[email protected]$ su user 

[email protected]$ jslint 
o files specified. 
Usage: /bin/jslint [now it finally works] 
+1

IIRC,如果使用root權限運行,npm的最新版本切換到用戶「nobody」作爲安全措施。這可能是也可能不是問題的原因,但它可能是相關的。您可以嘗試以root身份執行全局安裝,而不是使用sudo權限。 – ebohlman 2012-07-15 23:10:25

+0

工作正常!如果您想提交答案,我會將其標記爲正確。 – 2012-07-17 22:15:31

回答

3

如果使用sudo權限運行,npm的最新版本切換爲用戶「nobody」作爲安全措施。嘗試在以root身份登錄時進行全局安裝,而不是使用sudo。

+0

即使這並不總是工作。我用'npm install -g react-scripts'與npm版本4.8一起試了一下,並得到了'nobody'的sudo提示符。 – 2017-04-09 05:32:20

+0

你可以在npm的問題跟蹤器中找到[相應的問題](https://github.com/npm/npm/issues/3849) – 2017-06-23 08:57:35