npm install not installing things at /usr/bin

时间秒杀一切 提交于 2019-11-28 01:44:48

问题


I am trying to install SailsJS with:

$ sudo npm install -g sails

It works, install everything at /home/brunoluiz/npm/lib/node_modules/sails with the following log:

/home/brunoluiz/npm/bin/sails -> /home/brunoluiz/npm/lib/node_modules/sails/bin/sails.js
sails@0.9.16 /home/brunoluiz/npm/lib/node_modules/sails
├── connect-flash@0.1.1
├── pluralize@0.0.5
├── inflection@1.2.5
├── grunt-sails-linker@0.9.5
├── grunt-contrib-clean@0.4.1
├── node-uuid@1.4.0
├── async@0.2.9
├── grunt-contrib-concat@0.3.0
├── grunt-contrib-copy@0.4.1
├── grunt-contrib-coffee@0.7.0
├── ejs-locals@1.0.2
├── ejs@0.8.4
├── underscore.string@2.3.0
├── coffee-script@1.6.2
├── lodash@2.4.1
├── i18n@0.4.1 (debug@0.8.0, sprintf@0.1.3)
├── optimist@0.3.4 (wordwrap@0.0.2)
├── include-all@0.1.2 (underscore.string@2.3.1)
├── sails-disk@0.9.3 (waterline-criteria@0.9.7, lodash@2.3.0, fs-extra@0.8.1)
├── fs-extra@0.5.0 (jsonfile@0.0.1, ncp@0.2.7, mkdirp@0.3.5, rimraf@2.1.4)
├── connect-redis@1.4.5 (debug@0.8.0, redis@0.7.3)
├── grunt-contrib-jst@0.5.0 (lodash@1.0.1, grunt-lib-contrib@0.5.3)
├── glob@3.1.14 (inherits@1.0.0, graceful-fs@1.1.14, minimatch@0.2.14)
├── grunt-contrib-cssmin@0.6.1 (grunt-lib-contrib@0.6.1, clean-css@1.0.12)
├── grunt-cli@0.1.9 (resolve@0.3.1, nopt@1.0.10, findup-sync@0.1.3)
├── grunt-contrib-watch@0.4.4 (gaze@0.3.4, tiny-lr@0.0.4)
├── connect-mongo@0.3.2 (mongodb@1.2.14)
├── grunt-contrib-uglify@0.2.2 (grunt-lib-contrib@0.6.1, uglify-js@2.3.6)
├── waterline@0.9.16 (underscore@1.5.2, q@0.9.7, anchor@0.9.12)
├── grunt@0.4.1 (which@1.0.5, dateformat@1.0.2-1.2.3, eventemitter2@0.4.13, colors@0.6.2, hooker@0.2.3, async@0.1.22, nopt@1.0.10, minimatch@0.2.14, lodash@0.9.2, rimraf@2.0.3, coffee-script@1.3.3, underscore.string@2.2.1, iconv-lite@0.2.11, glob@3.1.21, findup-sync@0.1.3, js-yaml@2.0.5)
├── winston@0.7.1 (cycle@1.0.3, stack-trace@0.0.9, eyes@0.1.8, colors@0.6.2, pkginfo@0.3.0, request@2.16.6)
├── express@3.4.0 (methods@0.0.1, debug@0.8.0, range-parser@0.0.4, cookie-signature@1.0.1, fresh@0.2.0, buffer-crc32@0.2.1, cookie@0.1.0, mkdirp@0.3.5, commander@1.2.0, send@0.1.4, connect@2.9.0)
├── grunt-contrib-less@0.9.0 (grunt-lib-contrib@0.6.1, chalk@0.4.0, less@1.6.3)
└── socket.io@0.9.14 (base64id@0.1.0, policyfile@0.0.4, redis@0.7.3, socket.io-client@0.9.11)

The problem is when you try to use sails: you run sails new project, for example, and it doesn't find sails. Investigating a little bit, I discovered npm is not installing the modules at /usr/bin. Is there some reason for that? Some config?

The same is happening with Karma module.

I used the nodejs from ppa, created the symbolic link for node and installed npm from the official install.sh script (https://www.npmjs.org/install.sh).


回答1:


It sounds like your npm installation is configured to use /home/brunoluiz/npm as prefix, meaning that it will place symlinks to the CLIs that come with globally installed packages in {prefix}/bin.

In a default installation, prefix is either /usr or /usr/local on Unix platforms (%APPDATA%/npm on Windows).

If {prefix}/bin is not in your $PATH, you won't be able to execute such CLIs just by name.

To see the current prefix value in effect, run:

npm get prefix

Your options are:

  • Add /home/brunoluiz/npm/bin to your $PATH

  • Change the value of the prefix configuration item to a folder whose bin subfolder is already in your $PATH; e.g.:

    npm set prefix /usr       # Ubuntu; CLI symlinks are placed in /usr/bin
    npm set prefix /usr/local # OSX; CLIs symlinks are placed in /usr/local/bin

Note, however, that you'd then have to reinstall your global packages for the symlinks to be created in the new {prefix}\bin location.




回答2:


In addition to mklement0's answer, the first solution (adding the npm binary directory path to the PATH variable) creates another problem when the commands are run with sudo prefix on Linux environment. To solve it, the npm binary directory path must also be added in secure_path in /etc/sudoers.tmp. Here is how: Why can't sudo find a command after I added it to PATH?



来源:https://stackoverflow.com/questions/23090835/npm-install-not-installing-things-at-usr-bin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!