使用分发nodejs包(Ubuntu)将NPM安装到主目录中

时间:2012-04-09 23:45:54

标签: node.js npm

我想使用分发Node.js包(或chris-lea ppa用于更新版本)但是将NPM安装到我的主目录。

这可能看起来很挑剔,但对于使用polyglot / github的开发人员来说,在Linux下设置语言运行时/库环境是一种非常惯用的方式:运行时的发行版包,每用户环境中的第三方库(参见virtualenv, RVM - 如果你愿意,RVM也会为你构建Ruby。如果有必要,我将在本地构建节点,但它是一个PITA,因为Node正成为许多项目的偶然开发需求。

9 个答案:

答案 0 :(得分:188)

NPM已经将本地软件包安装到您的项目中,但我仍然希望系统远离我的操作系统文件。以下是我建议划分Nodejs包的方法:

通过chris-lea PPA安装Nodejs和NPM。然后我在homedir中设置了一个包根,以保存Node“global”包:

 $ 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

答案 1 :(得分:23)

Jake的答案于2012年发布,虽然很有用,但它引用了自2015年3月起不再更新的Chris Lea的Node.js PPA。

这是我用来在我的主目录中安装Node.js和npm的步骤:

使用Completely unrelated error using coredata安装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(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 :(得分:5)

Just Jake发布的解决方案很棒。但是,由于npm&gt;的错误1.4.10,可能无法按预期工作。 (请参阅thisthis

虽然错误已经解决,但您可以按照以下步骤降级到npm 1.4.10:

  1. 在$ HOME / .npmrc
  2. 中注释前缀行
  3. 运行sudo npm install -g npm@1.4.10
  4. 确保安装了正确版本的npm(npm --version
  5. 取消注释$ HOME / .npmrc
  6. 中的前缀行
  7. 继续在您的主文件夹中安装全局包!。

答案 3 :(得分:3)

因为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

自述文件相当不错: https://github.com/ekalinin/nodeenv

答案 4 :(得分:2)

我使用@ just-jake solution一段时间后发现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版本。

    要安装,例如nodejs v4.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
    

答案 5 :(得分:1)

扩展Just Jake和user1533401提供的答案:我无法降级,因为我使用共享主机并且节点安装在系统目录中。这也是我更改npm安装全局脚本的目录的原因,如果我想要它那样做的话。对于那些在同一条船上的人,这是我找到的另一个临时修复工程:

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

错误是npm不读取每个用户的配置文件,但是每次安装全局脚本时都指定它,修复了这个问题。找到here

答案 6 :(得分:1)

我对类似问题的解决方案略有不同,这是由于我全局安装了 npm,因此我可以在我的 macOS 系统的终端中使用它。我只是使用以下命令在我的存储库的根目录中本地初始化它:

npm init --yes

这使我能够使用“package.json”和“package-lock.json”文件在 /node_modules 的本地根目录中安装节点包,而不是在用户的主目录中。

答案 7 :(得分:0)

如前所述herehere

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

答案 8 :(得分:0)

其他答案已经过时了:2020年的解决方案使用NPM_CONFIG_PREFIX环境变量。 (请参见details

例如,

$ 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