Install NPM into home directory with distribution nodejs package (Ubuntu)

后端 未结 8 1633
忘了有多久
忘了有多久 2020-12-07 06:38

I\'d like to use the distribution Node.js packages (or the chris-lea ppa for more recent releases) but install NPM to my home directory.

This may seem picky, but it

相关标签:
8条回答
  • 2020-12-07 07:20

    Other answers have outdated solutions: 2020's solution is using NPM_CONFIG_PREFIX environment variable. (See details)

    For example,

    $ NPM_CONFIG_PREFIX="$HOME/.npm-packages" npm install -g ios-sim
    /Users/<name>/.npm-packages/bin/ios-sim -> /Users/<name>/.npm-packages/lib/node_modules/ios-sim/bin/ios-sim
    + ios-sim@9.0.0
    added 108 packages from 68 contributors in 3.094s
    
    0 讨论(0)
  • 2020-12-07 07:26

    Because python does already a great job virtualenv, I use nodeenv. Compared to nvm, you can create multiple environments for the same node version (e.g. two environments for node 0.10 but with different sets of packages).

    ENVNAME=dev1
    
    #  create an environment
    python -m virtualenv ${ENVNAME}
    
    # switch to the newly created env
    source ${ENVNAME}/bin/activate
    
    # install nodeenv
    pip install nodeenv
    
    # install system's node into virtualenv
    nodeenv --node=system --python-virtualenv
    

    The readme is pretty good: https://github.com/ekalinin/nodeenv

    0 讨论(0)
  • 2020-12-07 07:32

    NPM will install local packages into your projects already, but I still like to keep the system away from my operating system's files. Here's how I suggest compartmentalizing Nodejs packages:

    Install Nodejs and NPM via the chris-lea PPA. Then I set up a package root in my homedir to hold the Node "global" packages:

     $ NPM_PACKAGES="$HOME/.npm-packages"
     $ mkdir -p "$NPM_PACKAGES"
    

    Set NPM to use this directory for its global package installs:

     $ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc
    

    Configure your PATH and MANPATH to see commands in your $NPM_PACKAGES prefix by adding the following to your .zshrc/.bashrc:

    # NPM packages in homedir
    NPM_PACKAGES="$HOME/.npm-packages"
    
    # Tell our environment about user-installed node tools
    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath` command
    unset MANPATH  # delete if you already modified MANPATH elsewhere in your configuration
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    
    # Tell Node about these packages
    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    

    Now when you do an npm install -g, NPM will install the libraries into ~/.npm-packages/lib/node_modules, and link executable tools into ~/.npm-packages/bin, which is in your PATH.

    Just use npm install -g as you would normally:

    [justjake@marathon:~] $ npm install -g coffee-script
    ... (npm downloads stuff) ...
    /home/justjake/.npm-packages/bin/coffee -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/coffee
    /home/justjake/.npm-packages/bin/cake -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/cake
    coffee-script@1.3.3 /home/justjake/.npm-packages/lib/node_modules/coffee-script
    
    [justjake@marathon:~] $ which coffee
    /home/justjake/.npm-packages/bin/coffee
    
    0 讨论(0)
  • 2020-12-07 07:39

    The solution posted by Just Jake is great. However, due to a bug with npm > 1.4.10, it may not work as expected. (See this and this)

    While the bug is solved, you can downgrade to npm 1.4.10 by following this steps:

    1. Comment the prefix line in your $HOME/.npmrc
    2. Run sudo npm install -g npm@1.4.10
    3. Ensure that the right version of npm is installed (npm --version)
    4. Uncomment the prefix line in your $HOME/.npmrc
    5. Proceed to install your global packages in your home folder!.
    0 讨论(0)
  • 2020-12-07 07:41

    As stated already here and here

    npm config set prefix ~
    echo export PATH=\$PATH:\~/bin >> ~/.bashrc
    . ~/.bashrc
    
    0 讨论(0)
  • 2020-12-07 07:43

    Jake's answer was posted in 2012 and while useful it references Chris Lea's Node.js PPAs who are no longer updated since march 2015.

    Here's the steps I use to install Node.js and npm in my home directory:

    Install Node.js with nvm (no sudo required):

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
    source ~/.bashrc
    nvm install 7
    npm install -g npm  # update npm
    

    Now you can install -g without sudo and everything goes into ~/.nvm/

    Or install Node.js without nvm (official instructions):

    Install Node.js

    • Node.js v6 (current LTS as of May 2017):

      curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
      sudo apt-get install -y nodejs
      
    • Node.js v7:

      curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
      sudo apt-get install -y nodejs
      

    Change npm's default directory to a local one:

    mkdir ~/.npm-global
    npm config set prefix '~/.npm-global'
    export PATH="$HOME/.npm-global/bin:$PATH"  # ← put this line in .bashrc
    source ~/.bashrc  # if you only updated .bashrc
    

    Alternatively replace .npm-global by the directory of your choice.

    Update npm and check it is installed in your $HOME directory:

    $ npm install npm -g
    /home/<username>/.npm-global/bin/npm -> /home/<username>/.npm-global/lib/node_modules/npm/bin/npm-cli.js
    /home/<username>/.npm-global/lib
    └─┬ npm@3.10.6 
      ├─┬ glob@7.0.5 
      │ └── minimatch@3.0.2 
      ├── npm-user-validate@0.1.5 
      └── rimraf@2.5.3 
    

    Now you can install -g without sudo and without messing with your system files.

    0 讨论(0)
提交回复
热议问题