配布nodejsパッケージ(Ubuntu)を使用してNPMをホームディレクトリにインストールする


93

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

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


回答:


200

NPMは既にローカルパッケージをプロジェクトにインストールしますが、オペレーティングシステムのファイルからシステムを遠ざけておきます。ここに私がNodejsパッケージを区分化することを提案する方法があります:

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

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

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

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

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

# 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

2
nodeがインストールされているがインストールされていnpmない共有システムを使用している場合は、上記の回答の設定に従ってnpm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | shからnpm、ホームシステムにインストールしてください。
Tim Lewis、

1
プレフィックスのセットがnpm 2.10.1では機能しないため、結局実行されましたnpm config set prefix $NPM_PACKAGES
Calin

次のスクリプトはこれを自動化すると主張しています:github.com/glenpike/npm-g_nosudo
Mike R

$HOME/.local代わりに接頭辞を使用します。ローカルファイルを保存するために、他のソフトウェアで最近よく使用されるフォルダーです。
Vaibhav K 2016

2
を使用する場合echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc、パスはでハードコードされません.npmrcが、npmが実行されるたびにnpmは環境変数からパスを読み取ります(エコーを実行するシェルが変数を展開しないように変更した"こと'に注意して、変数の{}周りに追加しましたその構文を用いているため、.npmrcこの作業を行うために、私は変更する必要がなかった.bashrc読むために:export NPM_PACKAGES="$HOME/.npm-packages"追加。exportNPMにそれが利用できるように関連のない、私はあなたが追加する必要があると思います。export同様に他の変数に。
Matthijs Kooijmanを

30

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

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

Node.jsをnvmでインストールします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ます。


2番目のオプションは、NPMのドキュメントサイトdocs.npmjs.com/getting-started/…
Vadim

6

Just Jakeが投稿したソリューションは素晴らしいです。ただし、npm> 1.4.10のバグにより、期待どおりに動作しない場合があります。(これこれを見てください)

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

  1. $ HOME / .npmrcのプレフィックス行をコメント化します
  2. 走る sudo npm install -g npm@1.4.10
  3. npmの正しいバージョンがインストールされていることを確認してください(npm --version
  4. $ HOME / .npmrcのプレフィックス行のコメントを外します
  5. グローバルパッケージをホームフォルダーにインストールします!。

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


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

2

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

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

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



0

他の答えは時代遅れのソリューションを持っています: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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.