NPM'yi dağıtım nodejs paketi (Ubuntu) ile ana dizine yükleyin


94

Dağıtım Node.js paketlerini (veya daha yeni sürümler için chris-lea ppa'yı ) kullanmak, ancak NPM'yi ana dizinime yüklemek istiyorum.

Bu seçici görünebilir, ancak çok dilli / github kullanan geliştiricilerin Linux altında dil çalışma zamanı / kitaplık ortamları kurmaları için oldukça deyimsel bir yoldur: çalışma zamanı için dağıtım paketleri, kullanıcı başına ortamda 3. taraf kitaplıklar (bkz. Virtualenv, RVM - RVM İsterseniz sizin için Ruby de oluşturacaktır). Gerekirse yerel olarak düğüm oluşturacağım ancak bu bir PITA çünkü Node birçok proje için tesadüfi bir geliştirme gereksinimi haline geliyor.


Yanıtlar:


203

NPM, projelerinize yerel paketleri zaten kuracak, ancak yine de sistemi işletim sistemimin dosyalarından uzak tutmak istiyorum. Nodejs paketlerini bölümlere ayırmayı şu şekilde öneriyorum:

Chris-lea PPA aracılığıyla Nodejs ve NPM'yi kurun. Ardından, "genel" Düğüm paketlerini tutmak için homedir'imde bir paket kökü kurdum:

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

NPM'yi global paket kurulumları için bu dizini kullanacak şekilde ayarlayın:

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

Aşağıdakileri .zshrc / .bashrc dosyanıza ekleyerek $ NPM_PACKAGES önekinizdeki komutları görmek için PATH ve MANPATH öğenizi yapılandırın:

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

Şimdi bir yaptığınızda npm install -g, NPM kitaplıkları yükleyecek ~/.npm-packages/lib/node_modulesve çalıştırılabilir araçları ~/.npm-packages/bin, sizin PATH.

npm install -gNormalde yaptığınız gibi kullanın :

[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
nodeYüklü olduğu ancak kurulu npmolmayan bir paylaşılan sistemdeyseniz , yukarıdaki yanıttaki kurulumu takip edin ve ardından kendisini ana dizininize npm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | shkurmak için npm.
Tim Lewis

1
Önek seti benim için npm 2.10.1'de çalışmıyor, bu yüzden koşmaya başladımnpm config set prefix $NPM_PACKAGES
Calin

Aşağıdaki komut dosyası bunu otomatikleştirdiğini iddia ediyor: github.com/glenpike/npm-g_nosudo
Mike R

Bunun $HOME/.localyerine önek için kullanıyorum . Yerel dosyaları depolamak için diğer yazılımlar tarafından her gün yaygın olarak kullanılan bir klasördür.
Vaibhav K

2
Eğer kullanıyorsanız: echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc, yol kodlanmış değil .npmrc, ama npm çalışır (not Değiştim her npm ortam değişkeni onu okuyacak "kadar 'yürütür değişkeni genişlemesini yankı ve ben ekledi O kabuğu önlemek amacıyla {}değişkeni etrafında Bu kullanılan sözdizimi olduğundan, .npmrc. Bu işi yapmak için, ben değiştirmek zorunda mı .bashrcokumak için: export NPM_PACKAGES="$HOME/.npm-packages". ekleme export. NPM kullanımına sunar İlgisiz, ben eklemek gerekir düşünüyorum export. aynı zamanda diğer değişkenlere
Matthijs KOOIJMAN

31

Jake'in cevabı 2012'de yayınlandı ve yararlı olsa da, Mart 2015'ten bu yana artık güncellenmeyen Chris Lea'nın Node.js PPA'larına atıfta bulunuyor.

Ana dizinime Node.js ve npm'yi kurmak için kullandığım adımlar:

Node.js'yi nvm ile yükleyin ( sudogerekli değildir):

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

Şimdi install -gonsuz yapabilirsin sudove her şey içine girer~/.nvm/

Veya Node.js'yi nvm olmadan yükleyin ( resmi talimatlar ):

Node.js'yi yükleyin

  • Node.js v6 (Mayıs 2017 itibarıyla mevcut 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'nin varsayılan dizinini yerel bir dizinle değiştirin:

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

Alternatif .npm-globalolarak, seçtiğiniz dizinle değiştirin .

Npm'yi güncelleyin ve $HOMEdizininizde kurulu olup olmadığını kontrol edin :

$ 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 

Artık sistem dosyalarınızla install -guğraşmadan sudove uğraşmadan yapabilirsiniz .


2. seçenek ayrıca NPM docs sitesinde açıklanmıştır: docs.npmjs.com/getting-started/…
Vadim

6

Just Jake'in gönderdiği çözüm harika. Ancak, npm> 1.4.10 olan bir hata nedeniyle beklendiği gibi çalışmayabilir. ( Bunu ve buna bakın )

Hata çözülürken aşağıdaki adımları izleyerek npm 1.4.10'a geçebilirsiniz:

  1. $ HOME / .npmrc dosyanızda önek satırını yorumlayın
  2. Çalıştırmak sudo npm install -g npm@1.4.10
  3. Doğru npm sürümünün kurulu olduğundan emin olun ( npm --version)
  4. $ HOME / .npmrc dosyanızdaki önek satırının açıklamasını kaldırın
  5. Global paketlerinizi ana klasörünüze kurmaya devam edin !.

4

Python zaten harika bir iş çıkardığı için virtualenvkullanıyorum nodeenv. İle karşılaştırıldığında nvm, aynı düğüm sürümü için birden fazla ortam oluşturabilirsiniz (örneğin, düğüm için 0.10ancak farklı paket setleriyle iki ortam ).

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

Benioku dosyası oldukça iyi: https://github.com/ekalinin/nodeenv


3

Bir süre @ just-jake çözümünü kullandım ve nvm'nin kurulumunun daha kolay olduğunu gördüm . Ayrıca, .NET Framework'ün farklı sürümlerinin kurulmasına ve kullanılmasına izin veren çok güçlü bir çözümdür nodejs.

Ubuntu 14.04 veya 16.04'te:

  1. Bina için ön koşul paketlerini kurun nodejs:

    sudo apt-get update
    sudo apt-get install build-essential libssl-dev
    
  2. Nvm'yi yükleyin :

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

    Nvm'nin daha yeni bir sürümünün mevcut olması durumunda, nvm sitesinde gerçek kurulum komutunu bulabilirsiniz .

  3. nvmyükleyici, önyükleme komut dosyasını ekleyecektir ~/.bashrc, bu nedenle çalıştırmak için terminali yeniden açmanız veya yapmanız gerekir:

    source ~/.bashrc
    
  4. Artık istediğiniz herhangi bir nodejssürümü kurabilir , aralarında geçiş yapabilirsiniz.

    nvm ls-remoteMevcut nodejssürümleri listelemek için kullanın .

    Örneğin, nodejsv4.2.4'ü yüklemek için şunları yapın:

    # 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 ve user1533401 tarafından sağlanan yanıtı genişletmek için: Paylaşılan barındırma kullandığım ve düğüm bir sistem dizinine yüklendiğinden eski sürüme geçemiyorum. Bu aynı zamanda, eğer istersem npm'nin global betikleri yüklediği dizini de bu yüzden değiştirdim. Aynı gemide olanlar için işte bulduğum başka bir geçici düzeltme:

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

Buradaki hata, npm'nin kullanıcı başına yapılandırma dosyanızı okumaması, ancak her global komut dosyası yüklediğinizde bunu belirtmenizin bunu düzeltmesidir. Burada bulundu .


2

Zaten burada ve burada belirtildiği gibi

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

0

Diğer cevapların modası geçmiş çözümleri var: 2020'nin çözümü NPM_CONFIG_PREFIXortam değişkeni kullanıyor . (Ayrıntılara bakın )

Örneğin,

$ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.