Instal NPM ke direktori home dengan paket nodejs distribusi (Ubuntu)

94

Saya ingin menggunakan paket distribusi Node.js (atau chris-lea ppa untuk rilis yang lebih baru) tetapi menginstal NPM ke direktori home saya.

Ini mungkin tampak pilih-pilih, tetapi ini adalah cara yang cukup idiomatis bagi pengembang yang menggunakan polyglot / github untuk mengatur lingkungan runtime / perpustakaan bahasa di Linux: paket distro untuk runtime, pustaka pihak ketiga di lingkungan per pengguna (lihat virtualenv, RVM - RVM juga akan membangun Ruby untuk Anda jika Anda mau). Jika perlu, saya akan membangun node secara lokal tetapi ini adalah PITA karena Node menjadi persyaratan pengembangan insidental untuk banyak proyek.

Eric Drechsel
sumber
Lihat juga stackoverflow.com/questions/19352976/…
Kolonel Panic

Jawaban:

203

NPM akan menginstal paket lokal ke dalam proyek Anda, tetapi saya masih ingin menjauhkan sistem dari file sistem operasi saya. Inilah cara saya menyarankan untuk mengelompokkan paket Nodejs:

Instal Nodejs dan NPM melalui chris-lea PPA. Kemudian saya menyiapkan root paket di homedir saya untuk menampung paket Node "global":

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

Setel NPM untuk menggunakan direktori ini untuk penginstalan paket globalnya:

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

Konfigurasikan PATH dan MANPATH Anda untuk melihat perintah di awalan $ NPM_PACKAGES Anda dengan menambahkan berikut ini ke .zshrc / .bashrc Anda:

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

Sekarang ketika Anda melakukan npm install -g, NPM akan menginstal perpustakaan ke ~/.npm-packages/lib/node_modules, dan menautkan alat yang dapat dieksekusi ke ~/.npm-packages/bin, yang ada di file PATH.

Gunakan saja npm install -gseperti biasa:

[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
Hanya Jake
sumber
2
Jika Anda menggunakan sistem bersama di mana nodediinstal tetapi npmtidak, ikuti pengaturan dalam jawaban di atas dan kemudian npm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | shuntuk npmmenginstal sendiri di direktori home Anda.
Tim Lewis
1
Set awalan tidak berfungsi untuk saya pada npm 2.10.1 jadi saya akhirnya berjalannpm config set prefix $NPM_PACKAGES
Calin
Skrip berikut mengklaim untuk mengotomatiskan ini: github.com/glenpike/npm-g_nosudo
Mike R
Saya gunakan $HOME/.localsebagai gantinya untuk awalan. Ini adalah folder yang biasa digunakan sekarang-a-hari oleh perangkat lunak lain untuk menyimpan file lokal.
Vaibhav K
2
Jika Anda menggunakan: echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc, jalan tidak hardcoded di .npmrc, tapi NPM akan membacanya dari variabel lingkungan setiap kali NPM berjalan (catatan saya berubah "untuk 'untuk mencegah shell yang mengeksekusi gema dari perluasan variabel, dan saya menambahkan {}sekitar variabel , karena itu adalah sintaks yang digunakan dalam .npmrc. Untuk membuat ini bekerja, saya harus mengubah .bashrcuntuk membaca:. export NPM_PACKAGES="$HOME/.npm-packages"Menambahkan exportmembuatnya tersedia untuk npm. Tidak terkait, saya pikir Anda perlu menambahkan exportvariabel lain juga.
Matthijs Kooijman
31

Jawaban Jake telah diposting pada tahun 2012 dan meskipun berguna, ini merujuk pada AKP Node.js Chris Lea yang tidak lagi diperbarui sejak Maret 2015.

Berikut langkah-langkah yang saya gunakan untuk menginstal Node.js dan npm di direktori home saya:

Instal Node.js dengan nvm (tidak sudodiperlukan):

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

Sekarang Anda bisa install -gtanpa sudodan semuanya masuk~/.nvm/

Atau instal Node.js tanpa nvm ( instruksi resmi ):

Instal Node.js

  • Node.js v6 (LTS saat ini per Mei 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
    

Ubah direktori default npm ke direktori lokal:

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

Atau gantikan .npm-globaldengan direktori pilihan Anda.

Perbarui npm dan periksa apakah sudah terpasang di $HOMEdirektori Anda :

$ 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
└─┬ [email protected] 
  ├─┬ [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  └── [email protected] 

Sekarang Anda bisa install -gtanpa sudodan tanpa mengotak-atik file sistem Anda.

Maxime R.
sumber
Opsi kedua juga dijelaskan di situs dokumen NPM: docs.npmjs.com/getting-started/…
Vadim
6

Solusi yang diposting oleh Just Jake sangat bagus. Namun, karena bug dengan npm> 1.4.10, ini mungkin tidak berfungsi seperti yang diharapkan. (Lihat ini dan ini )

Sementara bug teratasi, Anda dapat menurunkan versi ke npm 1.4.10 dengan mengikuti langkah-langkah ini:

  1. Komentari baris awalan di $ HOME / .npmrc Anda
  2. Lari sudo npm install -g [email protected]
  3. Pastikan versi npm yang benar diinstal ( npm --version)
  4. Hapus tanda komentar pada baris awalan di $ HOME / .npmrc Anda
  5. Lanjutkan untuk menginstal paket global Anda di folder rumah Anda !.
pengguna1533401
sumber
4

Karena python sudah melakukan pekerjaan yang bagus virtualenv, saya gunakan nodeenv. Dibandingkan dengan nvm, Anda dapat membuat beberapa lingkungan untuk versi node yang sama (misalnya, dua lingkungan untuk node 0.10tetapi dengan set paket yang berbeda).

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 cukup bagus: https://github.com/ekalinin/nodeenv

tidak tahu
sumber
3

Saya menggunakan solusi @ just-jake untuk beberapa waktu dan menemukan bahwa nvm lebih mudah diatur. Juga merupakan solusi yang sangat kuat yang memungkinkan untuk menginstal dan menggunakan versi yang berbeda nodejs.

Di Ubuntu 14.04 atau 16.04:

  1. Instal paket prasyarat untuk membangun nodejs:

    sudo apt-get update
    sudo apt-get install build-essential libssl-dev
    
  2. Instal nvm :

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

    Jika versi nvm yang lebih baru akan tersedia, Anda dapat menemukan perintah instalasi sebenarnya di situs nvm .

  3. nvminstaller akan menambahkan skrip bootstrap ke ~/.bashrc, jadi Anda perlu membuka kembali terminal untuk menjalankannya, atau melakukan:

    source ~/.bashrc
    
  4. Sekarang Anda dapat menginstal nodejsversi apa pun yang Anda suka, beralih di antaranya, dll.

    Gunakan nvm ls-remoteuntuk mencantumkan nodejsversi yang tersedia .

    Untuk menginstal, misalnya, nodejsv4.2.4 lakukan:

    # 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
    
rutsky
sumber
2

Untuk memperluas jawaban yang diberikan oleh Just Jake dan user1533401: Saya tidak dapat menurunkan versi karena saya menggunakan shared hosting dan node diinstal di direktori sistem. Ini juga mengapa saya harus mengubah direktori tempat npm menginstal skrip global jika saya ingin melakukannya. Bagi mereka yang berada di perahu yang sama, berikut ini perbaikan sementara lainnya yang saya temukan berfungsi:

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

Bugnya adalah npm tidak membaca file konfigurasi per pengguna Anda, tetapi menentukannya setiap kali Anda menginstal skrip global akan memperbaikinya. Ditemukan di sini .

Bart Louwers
sumber
2

Seperti yang sudah dinyatakan disini dan disini

npm config set prefix ~
echo export PATH=\$PATH:\~/bin >> ~/.bashrc
. ~/.bashrc
rofrol.dll
sumber
0

Jawaban lain memiliki solusi yang sudah ketinggalan zaman: solusi tahun 2020 menggunakan NPM_CONFIG_PREFIXvariabel lingkungan. (Lihat detailnya )

Sebagai contoh,

$ 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
+ [email protected]
added 108 packages from 68 contributors in 3.094s
Byoungchan Lee
sumber