102

ディストリビューションのNode.jsパッケージ(または最近のリリースの場合はchris-lea ppa )を使用したいのですが、 NPMをホームディレクトリにインストールします。

これは厄介に思えるかもしれませんが、polyglot / githubにとってはかなり慣用的な方法です-開発者を使用してLinuxで言語ランタイム/ライブラリ環境をセットアップします:ランタイム用のディストリビューションパッケージ、ユーザーごとの環境でのサードパーティライブラリ(virtualenv、RVM-RVMを参照)必要に応じてRubyもビルドします)。必要に応じて、ノードをローカルで構築しますが、ノードは多くのプロジェクトの付随的な開発要件になりつつあるため、これはPITAです。

4

11 に答える 11

214

NPMはすでにローカルパッケージをプロジェクトにインストールしますが、それでもシステムをオペレーティングシステムのファイルから遠ざけるのが好きです。Nodejsパッケージをコンパートメント化することを提案する方法は次のとおりです。

chris-leaPPAを介してNodejsとNPMをインストールします。次に、ノードの「グローバル」パッケージを保持するために、ホームディレクトリにパッケージルートを設定します。

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

グローバルパッケージのインストールにこのディレクトリを使用するようにNPMを設定します。

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

.zshrc / .bashrcに以下を追加して、$NPM_PACKAGESプレフィックス内のコマンドを表示するようにPATHとMANPATHを構成します。

# 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"

これで、を実行するnpm install -gと、NPMはライブラリをにインストールし、~/.npm-packages/lib/node_modules実行可能ツールをにリンクします。~/.npm-packages/binこれはにありますPATH

通常どおりに使用npm install -gします。

[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
于 2012-10-22T23:51:29.777 に答える
36

Jakeの回答は2012年に投稿され、有用ではありますが、2015年3月以降更新されなくなったChrisLeaのNode.jsPPAを参照しています。

Node.jsとnpmをホームディレクトリにインストールするために使用する手順は次のとおりです。

nvmを使用してNode.jsをインストールします(必須ではありませsudoん)。

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

今、あなたはinstall -gなしsudoででき、すべてが入ります~/.nvm/

または、nvmなしでNode.jsをインストールします(公式の手順):

Node.jsをインストールします

  • Node.js v6(2017年5月現在の現在のLTS):

    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
    

npmのデフォルトディレクトリをローカルディレクトリに変更します。

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

.npm-globalまたは、選択したディレクトリに置き換えます。

npmを更新し、$HOMEディレクトリにインストールされていることを確認します。

$ 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 

これで、システムファイルをいじることinstall -gなくてもいなくてもかまいません。sudo

于 2016-09-07T15:18:08.953 に答える
6

JustJakeによって投稿されたソリューションは素晴らしいです。ただし、npm> 1.4.10のバグが原因で、期待どおりに機能しない場合があります。(これこれを参照してください)

バグは解決されていますが、次の手順に従ってnpm1.4.10にダウングレードできます。

  1. $ HOME/.npmrcのプレフィックス行にコメントを付けます
  2. 走るsudo npm install -g npm@1.4.10
  3. 正しいバージョンのnpmがインストールされていることを確認してください(npm --version
  4. $ HOME/.npmrcのプレフィックス行のコメントを解除します
  5. グローバルパッケージをホームフォルダにインストールします。
于 2014-06-26T13:16:51.223 に答える
4

Pythonはすでに素晴らしい仕事をしているのでvirtualenv、私はを使用しますnodeenv。と比較するとnvm、同じノードバージョンに対して複数の環境を作成できます(たとえば、ノードに対して2つの環境があります0.10が、パッケージのセットが異なります)。

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

readmeはかなり良いです: https ://github.com/ekalinin/nodeenv

于 2015-01-19T18:33:23.063 に答える
3

しばらくの間@just-jakeソリューションを使用しましたが、 nvmの方がセットアップが簡単であることがわかりました。また、さまざまなバージョンのをインストールして使用できる非常に強力なソリューションですnodejs

Ubuntu 14.04または16.04の場合:

  1. ビルドの前提条件パッケージをインストールしますnodejs

    sudo apt-get update
    sudo apt-get install build-essential libssl-dev
    
  2. nvmをインストールします:

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
    

    新しいバージョンのnvmが利用可能になる場合は、 nvmサイトで実際のインストールコマンドを見つけることができます。

  3. nvmインストーラーはブートストラップスクリプトをに追加する~/.bashrcため、ターミナルを再度開いて実行するか、次の手順を実行する必要があります。

    source ~/.bashrc
    
  4. これで、好きなバージョンをインストールnodejsしたり、それらを切り替えたりすることができます。

    使用nvm ls-remote可能なバージョンを一覧表示するために使用しnodejsます。

    たとえば、nodejsv4.2.4をインストールするには、次のようにします。

    # install v4.2.4
    nvm install v4.2.4 
    # use nodejs v4.2.4 in the current terminal session
    nvm use v4.2.4
    # use v4.2.4 by default in new terminal session
    nvm alias default v4.2.4
    
于 2015-12-25T23:34:06.437 に答える
3

すでにここここで述べたように

npm config set prefix ~
echo export PATH=\$PATH:\~/bin >> ~/.bashrc
. ~/.bashrc
于 2016-09-01T21:17:12.807 に答える
3

他の答えには時代遅れの解決策があります:2020年の解決策はNPM_CONFIG_PREFIX環境変数を使用しています。(詳細を参照

例えば、

$ 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
于 2020-07-22T02:56:06.683 に答える
2

Just Jakeとuser1533401によって提供された答えを拡張するには、共有ホスティングを使用していて、ノードがシステムディレクトリにインストールされているため、ダウングレードできません。これが、npmがグローバルスクリプトをインストールするディレクトリを変更したい理由でもあります。同じボートに乗っている人のために、私が見つけた別の一時的な修正があります:

npm install -g --prefix=$(npm config get prefix) <package>

バグは、npmがユーザーごとの構成ファイルを読み取らないことですが、グローバルスクリプトをインストールするたびにそれを指定すると、それが修正されます。ここで見つかりました。

于 2014-07-27T20:03:11.333 に答える
1

同様の問題に対して少し異なる解決策があります。これは、npmグローバルにインストールして、macOSシステムのターミナルで使用できるようにするためです。次のコマンドを使用して、リポジトリのルートディレクトリでローカルに初期化しただけです。

npm init --yes

これにより、ユーザーのホームディレクトリではなく、「package.json」ファイルと「package-lock.json」ファイルを使用して、/node_modulesのローカルルートディレクトリにノードパッケージをインストールできるようになりました。

于 2021-04-02T16:47:49.707 に答える
0

少なくともUbuntuでは、システム全体のデフォルト設定npmは、npm install --globalにパッケージをインストールしようとするもの/usr/lib/node_modulesです。自分のユーザーアカウントに別のデフォルトを設定するには、次の手順を1回実行します。

mkdir -p ~/.npm/lib/bin
npm config set prefix "~/.npm/lib"

さらに、次のフラグメントが必要です.profile

# set PATH so it includes user's private .npm/lib/bin if it exists
if [ -d "$HOME/.npm/lib/bin" ] ; then
    PATH="$HOME/.npm/lib/bin:$PATH"
fi

ここで何かをインストールするとnpm install --global packagename、正しい場所に配置され、PATHに表示されます(.profile変更を有効にするには、ログアウトして再ログインする必要がある場合があります)。

もちろん、代わりに他のディレクトリを選択することもできます。たとえば~/.config/npm、最新のシステムには意味があります。

于 2021-08-27T13:29:40.023 に答える
0

システムのディレクトリではなく、ユーザーのディレクトリにパッケージをインストールするnpm-userように自動的に設定するために使用できます。特権は必要npmありません。root

スクリプトへのリンク、スクリプトの使用方法の説明、およびスクリプトのオプションに関する情報は次のとおりです。macOS、Linux、* BSD、Windowsで動作します。

あなたはそれを次のように実行することができます:

$ curl -s "https://raw.githubusercontent.com/alexdelorenzo/npm-user/main/npm-user.sh" | bash

実行後、を使用すると、をnpm install -g <package>使用せずにユーザーのディレクトリにパッケージがインストールされますsudo

コピーしてコンソールに貼り付ける場合のコードは次のとおりです。

#!/usr/bin/env bash
# Copyright 2022 Alex DeLorenzo <alexdelorenzo.dev>. Licensed under the GPLv3.
export ROOT="${1:-$HOME}"

export NPM_DIR=".npm-packages"
export NPM_ROOT="$ROOT/$NPM_DIR"
export NPM_BIN="$NPM_ROOT/bin"
export NPM_MAN="$NPM_ROOT/share/man"

export BASH_RC="$HOME/.bashrc"
export ZSH_RC="$HOME/.zshrc"
export DEFAULT_RC="$BASH_RC"

export RC_ERR=1
export INDENT=2

set -e

shopt -s expand_aliases

alias indent="paste /dev/null - | expand -$INDENT"


quiet() {
  "$@" &> /dev/null
}


expand-tilde() {
  local path="$1" 
  echo "${path/#\~/$HOME}"
}


create-paths() {
  local bin="${1:-$NPM_BIN}"
  local man="${2:-$NPM_MAN}"

  mkdir --parents --verbose "$bin" "$man"
}


set-prefix() {
  npm config set prefix "$NPM_ROOT"
}


get-vars() {
  local bin="${1:-$NPM_BIN}"
  local man="${2:-$NPM_MAN}"

  cat <<EOF
export PATH="\$PATH:$bin"
export MANPATH="\${MANPATH:-\$(manpath)}:$man"
export NPM_PACKAGES="$NPM_ROOT"
EOF
}


already-added() {
  local rc="${1:-$DEFAULT_RC}"
  local bin="${2:-$NPM_BIN}"
  local man="${2:-$NPM_MAN}"

  local vars="$(get-vars "$bin" "$man")"
  quiet grep "$vars" "$rc"
}


main() {
  local rc="$(expand-tilde "${1:-$DEFAULT_RC}")"
  local bin="$(expand-tilde "${2:-$NPM_BIN}")"
  local man="$(expand-tilde "${3:-$NPM_MAN}")"

  printf "Creating %s and %s\n" "$bin" "$man"
  create-paths "$bin" "$man" || {
    printf "Couldn't create paths: %s and %s.\n" "$bin" "$man" 
    return $RC_ERR
  }
  
  printf "Setting npm prefix.\n"
  set-prefix || {
    printf "Couldn't set prefix.\n"  
    return $RC_ERR
  }

  if ! already-added "$rc" "$bin" "$man"; then
    printf "Writing to %s.\n" "$rc"
    get-vars "$bin" "$man" >> "$rc"
 
  fi || {
    printf "Unable to write to %s.\n" "$rc"
    printf "Add the following to your shell's configuration file:\n\n"

    get-vars "$bin" "$man" | indent
    return $RC_ERR
  }

  printf "Done.\n\n"
  printf "To load the changes in this shell, run:\n"
  printf "\tsource %s\n" "$rc"
}


main "$2" "$3" "$4"
于 2022-02-05T07:54:08.137 に答える