ติดตั้ง NPM ลงในโฮมไดเร็กทอรีด้วยแพ็คเกจการแจกจ่าย nodejs (Ubuntu)


94

ฉันต้องการใช้แพ็คเกจการแจกจ่าย Node.js (หรือchris-lea ppaสำหรับรุ่นล่าสุด) แต่ติดตั้ง NPM ในโฮมไดเร็กทอรีของฉัน

สิ่งนี้อาจดูจู้จี้จุกจิก แต่เป็นวิธีที่ใช้สำนวนได้ดีสำหรับนักพัฒนาที่ใช้หลายภาษา / github ในการตั้งค่าสภาพแวดล้อมรันไทม์ / ไลบรารีภาษาภายใต้ Linux: แพ็คเกจ distro สำหรับรันไทม์ไลบรารีของบุคคลที่สามในสภาพแวดล้อมต่อผู้ใช้ (ดู Virtualenv, RVM - RVM จะสร้าง Ruby ให้คุณด้วยหากคุณต้องการ) หากจำเป็นฉันจะสร้างโหนดในเครื่อง แต่เป็น PITA เนื่องจากโหนดกำลังกลายเป็นข้อกำหนดในการพัฒนาโดยบังเอิญสำหรับโครงการจำนวนมาก


คำตอบ:


204

NPM จะติดตั้งแพ็กเกจภายในเครื่องลงในโปรเจ็กต์ของคุณแล้ว แต่ฉันยังคงต้องการให้ระบบอยู่ห่างจากไฟล์ระบบปฏิบัติการของฉัน นี่คือวิธีที่ฉันแนะนำการแบ่งแพ็คเกจ Nodejs:

ติดตั้ง Nodejs และ NPM ผ่าน chris-lea PPA จากนั้นฉันตั้งค่ารูทแพ็คเกจใน homedir ของฉันเพื่อเก็บแพ็คเกจโหนด "global":

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

ตั้งค่า NPM เพื่อใช้ไดเร็กทอรีนี้สำหรับการติดตั้งแพ็กเกจส่วนกลาง:

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

กำหนดค่า PATH และ MANPATH ของคุณเพื่อดูคำสั่งในคำนำหน้า $ NPM_PACKAGES ของคุณโดยเพิ่มสิ่งต่อไปนี้ใน. 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"

ตอนนี้เมื่อคุณทำnpm install -gNPM จะติดตั้งไลบรารีลงใน~/.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

2
หากคุณใช้: echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrcเส้นทางจะไม่ฮาร์ดโค้ด.npmrcแต่ npm จะอ่านจากตัวแปรสภาพแวดล้อมเมื่อใดก็ตามที่ npm ทำงาน (โปรดทราบว่าฉันเปลี่ยน"เป็น'เพื่อป้องกันไม่ให้เชลล์ที่เรียกใช้เสียงสะท้อนขยายตัวแปรและฉันเพิ่ม{}รอบ ๆ ตัวแปร เนื่องจากเป็นไวยากรณ์ที่ใช้ใน.npmrcการทำงานนี้ฉันจึงต้องเปลี่ยน.bashrcเป็นอ่าน: การexport NPM_PACKAGES="$HOME/.npm-packages"เพิ่มการexportทำให้พร้อมใช้งานเป็น npm ไม่เกี่ยวข้องฉันคิดว่าคุณจะต้องเพิ่มexportตัวแปรอื่นด้วย
Matthijs Kooijman

31

คำตอบของ Jake ถูกโพสต์ในปี 2012 และในขณะที่มีประโยชน์ก็อ้างอิง PPA ของ Node.js ของ Chris Lea ซึ่งไม่ได้รับการอัปเดตอีกต่อไปตั้งแต่เดือนมีนาคม 2015

นี่คือขั้นตอนที่ฉันใช้เพื่อติดตั้ง 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/

หรือติดตั้ง Node.js โดยไม่ใช้ nvm ( คำแนะนำอย่างเป็นทางการ ):

ติดตั้ง Node.js

  • Node.js v6 (LTS ปัจจุบัน ณ เดือนพฤษภาคม 2017):

    curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
  • โหนด 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คุณสามารถสร้างหลายสภาพแวดล้อมสำหรับโหนดเวอร์ชันเดียวกัน (เช่นสองสภาพแวดล้อมสำหรับโหนด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โปรแกรมติดตั้งจะเพิ่มสคริปต์ bootstrap ให้~/.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.