NPM : how to source ./node_modules/.bin folder?

不羁岁月 提交于 2019-12-05 14:16:34

问题


I have a problem on npm installation

I have created a project say project A

cd ~/projectA
npm install sails

but sails command is not found after installation.

I know that it is successfully install in ~/projectA/node_modules directory. but the executable cannot be sourced. And i know it is installed ~/projectA/node_modules/.bin

How can I source the .bin automatically whenever I enter into this projectA folder?

Did I did something wrong?


回答1:


I can give you an inelegant solution, which is working for me. I just exported my path in my .bashrc file.

export PATH="$PATH:./node_modules/.bin"

Edit: It's been a while, but I have changed my strategy to use npm scripts instead. In the above case, setup package.json as follows:

"scripts": {
    "sails": "sails"
}

Which you can then run with

npm run sails

or with arguments

npm run sails -- <args>



回答2:


You should use the npm bin command to get an absolute path to your current node bin directory.

For example:

➤ lessc
bash: lessc: command not found
➤ npm bin
/home/brice/[...]/node_modules/.bin
➤ export PATH=$(npm bin):$PATH
➤ lessc --version
lessc 1.7.3 (Less Compiler) [JavaScript]

This avoids the problem of relative paths, especially if you're going to be using this in a build system that will invoke the command in subdirectories.




回答3:


A bit more robust is:

export PATH=$(npm bin):$PATH

You can either run it, add it to your shell profile, or create an alias like:

alias snpm='export PATH=$(npm bin):$PATH'

If you do go the alias route, be sure to use single quotes so it delays the execution of the variables!




回答4:


To use on the command line like sails generate foo you will need to install the npm module globally.

npm install -g sails

You could also use the path to the bin in the command if you don't want to install globally:

./node_modules/sails/bin/sails.js generate foo



回答5:


The official instructions for sails (https://github.com/balderdashy/sails) advises

To install the latest stable release with the command-line tool:

sudo npm -g install sails

This installs globally and adds to a directory like /usr/local/bin that should be in your $PATH.

But to answer the general question regarding the location of the binaries if you install locally, they should be placed in ./node_modules/.bin directory (so run ./node_modules/.bin/sails ...)




回答6:


If you don't like to mess up with your PATH for running a npm script that isn't global -- e.g. you are the only one to use it --, I would personally recommend the use of an sh "alias".

  1. npm install (locally) your beloved package (json-diff here, for instance)

    cd ~ && npm install json-diff
    
  2. alias it (save it in your ~/.xxxxrc file):

    alias diffj "\`npm bin\`/json-diff !*"
    

Then, for diffing 2 json's:

diffj old.json new.json



回答7:


In my ~/.bashrc, I have the following:

function nbin {
  local dir;
  dir=$(npm bin)
  if [ -d "$dir" ]; then
    ( # subshell to not change this shell's $PATH
      PATH=$dir:$PATH
      eval "$@"
    )
  else
    echo "\"$dir\" is not an npm binary directory." >&1
    return 1
  fi
}

I can then run executable foo in the .bin directory as:

nbin foo


来源:https://stackoverflow.com/questions/18033754/npm-how-to-source-node-modules-bin-folder

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