关键词:
【中文标题】使用分发 nodejs 包将 NPM 安装到主目录(Ubuntu)【英文标题】:Install NPM into home directory with distribution nodejs package (Ubuntu) 【发布时间】:2012-04-22 07:16:42 【问题描述】:我想使用分发的 Node.js 包(或 chris-lea ppa 以获得最新版本),但将 NPM 安装到我的主目录。
这可能看起来很挑剔,但对于使用 polyglot/github 的开发人员来说,这是一种非常惯用的方式来在 Linux 下设置语言运行时/库环境:运行时的发行包,每个用户环境中的第 3 方库(参见 virtualenv, RVM - 如果你愿意,RVM 也会为你构建 Ruby)。如有必要,我将在本地构建节点,但它是一个 PITA,因为 Node 正在成为许多项目的附带开发需求。
Instructions for installing node+npm to home directory【问题讨论】:
另见***.com/questions/19352976/… 【参考方案1】:您可以使用npm-user
自动设置npm
将软件包安装到您的用户目录而不是系统目录。不需要root
权限。
Here's a link to the script,有关如何使用它的说明以及有关其选项的信息。它适用于 macOS、Linux、*BSD 和 Windows。
你可以这样运行它:
$ curl -s "https://raw.githubusercontent.com/alexdelorenzo/npm-user/main/npm-user.sh" | bash
运行后,使用npm install -g <package>
会将软件包安装到您用户的目录中,而无需使用sudo
。
如果您想将代码复制并粘贴到控制台中,请查看以下代码:
#!/usr/bin/env bash
# Copyright 2022 Alex DeLorenzo <alexdelorenzo.dev>. Licensed under the GPLv3.
export ROOT="$1:-$HOME"
export NPM_DIR=".npm-packages"
export NPM_ROOT="$ROOT/$NPM_DIR"
export NPM_BIN="$NPM_ROOT/bin"
export NPM_MAN="$NPM_ROOT/share/man"
export BASH_RC="$HOME/.bashrc"
export ZSH_RC="$HOME/.zshrc"
export DEFAULT_RC="$BASH_RC"
export NULL="/dev/null"
test $OSTYPE == win* &&
export NULL="NUL"
quiet()
"$@" &> "$NULL"
create-paths()
local bin="$1:-$NPM_BIN"
local man="$2:-$NPM_MAN"
mkdir --parents --verbose "$bin"
mkdir --parents --verbose "$man"
set-prefix()
npm config set prefix "$NPM_ROOT"
already-added()
local rc="$1:-$DEFAULT_RC"
local bin="$2:-$NPM_BIN"
local line="export PATH=\"\$PATH:$bin\""
quiet grep "$line" "$rc"
add-to-path ()
local rc="$1:-$DEFAULT_RC"
local bin="$2:-$NPM_BIN"
local man="$3:-$NPM_MAN"
cat <<EOF
export PATH="\$PATH:$bin"
export MANPATH="\$MANPATH:-\$(manpath):$man"
export NPM_PACKAGES="$NPM_ROOT"
EOF
main()
local rc="$1:-$DEFAULT_RC"
local bin="$2:-$NPM_BIN"
local man="$3:-$NPM_MAN"
printf "Creating $bin and $man\n"
create-paths "$bin" "$man"
printf "Setting npm prefix.\n"
set-prefix
if ! already-added "$rc" "$bin"; then
printf "Writing to %s.\n" "$rc"
add-to-path "$rc" "$bin" "$man" >> "$rc"
fi
printf "Done.\n\n"
printf "To load the changes in this shell, run:\n"
printf "\tsource $rc\n"
main "$2" "$3" "$4"
【讨论】:
【参考方案2】:至少在 Ubuntu 上,系统范围 npm
的默认配置是 npm install --global
尝试将软件包安装到 /usr/lib/node_modules
。要为您自己的用户帐户设置不同的默认值,请运行以下一次:
mkdir -p ~/.npm/lib/bin
npm config set prefix "~/.npm/lib"
另外你想要.profile
中的以下片段:
# set PATH so it includes user's private .npm/lib/bin if it exists
if [ -d "$HOME/.npm/lib/bin" ] ; then
PATH="$HOME/.npm/lib/bin:$PATH"
fi
如果您现在使用 npm install --global packagename
安装某些东西,它将最终位于正确的位置,并且可以在您的 PATH 中找到(您可能需要注销并重新登录才能使 .profile
更改生效)。
当然,您也可以选择其他目录。例如,~/.config/npm
可能适用于现代系统。
【讨论】:
【参考方案3】:对于类似问题,我有一个稍微不同的解决方案,这是由于我全局安装了npm
,所以我可以在我的 macOS 系统的终端中使用它。我只是在我的存储库的根目录中使用以下命令在本地初始化它:
npm init --yes
这使我能够使用“package.json”和“package-lock.json”文件将节点包安装在 /node_modules 的本地根目录中,而不是在用户的主目录中。
【讨论】:
【参考方案4】:其他答案有过时的解决方案: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
【讨论】:
【参考方案5】:NPM 已经将本地包安装到您的项目中,但我仍然希望系统远离我的操作系统文件。以下是我建议划分 Nodejs 包的方法:
通过 chris-lea PPA 安装 Nodejs 和 NPM。然后我在我的 homedir 中设置了一个包根来保存节点“全局”包:
$ 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
【讨论】:
如果您在共享系统上安装了node
但未安装npm
,请按照上述答案中的设置,然后npm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | sh
将npm
本身安装在您的主目录。
前缀集在 npm 2.10.1 上对我不起作用,所以我最终运行 npm config set prefix $NPM_PACKAGES
以下脚本声称可以自动执行此操作:github.com/glenpike/npm-g_nosudo
我使用$HOME/.local
代替前缀。这是现在其他软件常用的文件夹来存储本地文件。
如果你使用:echo 'prefix = $NPM_PACKAGES' >> ~/.npmrc
,路径不是硬编码在.npmrc
中,但是每当npm运行时npm都会从环境变量中读取它(注意我在"
更改为'
为了防止执行回显的shell扩展变量,我在变量周围添加了
,因为这是.npmrc
中使用的语法。为了使这项工作,我必须更改.bashrc
以读取:export NPM_PACKAGES="$HOME/.npm-packages"
。添加export
使其可用于npm。不相关,我认为您还需要将export
添加到其他变量中。【参考方案6】:
Jake 的答案发布于 2012 年,虽然有用,但它引用了 Chris Lea 的 Node.js PPA,自 2015 年 3 月起不再更新。
以下是我在主目录中安装 Node.js 和 npm 的步骤:
使用nvm 安装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
现在您可以在没有sudo
的情况下使用install -g
,一切都进入~/.nvm/
或者在没有 nvm 的情况下安装 Node.js (official instructions):
安装 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
现在您可以在没有sudo
的情况下使用install -g
并且不会弄乱您的系统文件。
【讨论】:
第二个选项也在 NPM 文档站点中描述:docs.npmjs.com/getting-started/…【参考方案7】:如前所述 here 和 here
npm config set prefix ~
echo export PATH=\$PATH:\~/bin >> ~/.bashrc
. ~/.bashrc
【讨论】:
【参考方案8】:我使用@just-jake solution 一段时间,发现nvm 更容易设置。
它也是非常强大的解决方案,允许安装和使用不同版本的nodejs
。
在 Ubuntu 14.04 或 16.04 上:
安装构建nodejs
的必备包:
sudo apt-get update
sudo apt-get install build-essential libssl-dev
安装nvm:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
如果有更新版本的 nvm 可用,您可以在 nvm 站点上找到实际安装命令。
nvm
安装程序会将引导脚本添加到~/.bashrc
,因此您需要重新打开终端才能运行它,或者这样做:
source ~/.bashrc
现在你可以安装任何你喜欢的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
【讨论】:
【参考方案9】:因为 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
【讨论】:
【参考方案10】:扩展 Just Jake 和 user1533401 提供的答案:我无法降级,因为我使用共享主机并且节点安装在系统目录中。这也是为什么我要更改 npm 安装全局脚本的目录的原因。对于那些在同一条船上的人,这是我发现的另一个临时修复:
npm install -g --prefix=$(npm config get prefix) <package>
错误是 npm 不会读取您的每用户配置文件,但每次安装全局脚本时都指定它来修复该问题。找到here。
【讨论】:
【参考方案11】:Just Jake 发布的解决方案很棒。但是,由于 npm > 1.4.10 的错误,它可能无法按预期工作。 (见this和this)
当错误解决后,您可以按照以下步骤降级到 npm 1.4.10:
-
注释 $HOME/.npmrc 中的前缀行
运行
sudo npm install -g npm@1.4.10
确保安装了正确版本的 npm (npm --version
)
取消注释 $HOME/.npmrc 中的前缀行
继续在您的主文件夹中安装您的全局包!
【讨论】:
npm命令
...索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。4、npmhelp:查看帮助命令5、npmviewmoudleNamedependencies:查看包的依赖关系6、npmviewmoduleNamerepository.url:查看包的源文件地址7、npmviewmoduleNam... 查看详情
怎么在命令行中查看nodejs和npm的版本号
...:如果想要查看package.json文件夹下某个标签的内容,可以使用$npmviewmoduleNamelabelName。npmlist:查看当前目录下已安装的node包。注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules... 查看详情
linux下安装nodejs及npm
1、下载npm包官网下载npm安装包,https://nodejs.org/en/,左边是稳定版右边是最新版。2、解压,创建链接将压缩包解压到/opt(一般软件放在该目录)目录下。可以看到bin目录下有两个可执行文件node和npm,在/usr/local/bin中创建该文件... 查看详情
npm手册
npm现在都是随同NodeJS一起安装的包管理和分发工具,所以npm的安装,只要下载新版的nodejs已经集成了npm。安装好了以后,直接输入npm或者npmhelp,会出来一些npm自带的命令。通过输入 "npm-v" 来测试是否成功安装(会显示出... 查看详情
nodejs安装vue安装创建vue项目
...global基于nodejs,利用淘宝npm镜像安装相关依赖。由于国外使用npm会很慢,这里推荐使用淘宝nmp镜像;输入命令npmconfiglist显示所有配置信息,我们关注一个配置文件检查一下镜像站命令行不行:注意,此时默认的模块E:\workspace ... 查看详情
怎么安装npm?
...成后,打开nodejs命令行窗口,进入到npm的代码文件夹下,使用下边命令安装node cli.js install npm -gf 其中-gf是指全局安装的意思,你可以不要,这样会安装在当前文件夹下,当前工程下而已。安装完成了npm后,你... 查看详情
使用npm发布自己的组件包(代码片段)
使用npm发布自己的组件包前言?怎么使用npm发布自己的组件包呢?博主看了不少相关的文章,都没有一个好的讲述。要么丢三落四,要么就是复杂到外行人根本看不懂,甚至无从下手。于是,在博主的潜心钻研下,终于成功了!... 查看详情
linux下安装nodejs及npm(代码片段)
1、下载npm包官网下载npm安装包,https://nodejs.org/en/,左边是稳定版右边是最新版。2、解压,创建链接将压缩包解压到/opt(一般软件放在该目录)目录下。可以看到bin目录下有两个可执行文件node和npm,在/usr/local/bin中创... 查看详情
npm安装及简单使用
...当前版本。Linux中安装nodejs的方法:对于国内的情形,在使用npm安装JS包之前建议先更改npm的镜像。配置npm的国内镜像站点为:https://registry.npm.taobao.org。方法一:在系统的HOME目录新建.npmrc文件并添加registry=https://registry.npm.taobao.or... 查看详情
通过npm使用react
要想使用npm,请先安装nodejs.第一步、安装全局包$npminstallbabel-g$npminstallwebpack-g$npminstallwebpack-dev-server-g第二步、创建根目录创建一个根目录,目录名为:reactApp,再使用npminit初始化,生成package.json文件:$mkdirreactApp$cdreactApp/$npminitnam... 查看详情
关于安装nodejs后npm不是内部或外部命令的解决方法
把nodejs安装到E盘后只能在安装目录使用nodejs,无法在全局变量里面使用。检查全局变量Path后发现问题D:\\SOFT_PHP_PACKAGE\\mysql\\bin;%SystemRoot%\\system32;%SystemRoot%;%SystemRoot%\\System32\\Wbem;%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1. 查看详情
nvm下载安装+使用教程(管理nodejs版本,实现按需加载版本)(代码片段)
1.nvm的下载+安装nvm(nodeversionmanager):方便切换node.js版本。安装注意事项:卸载掉现有的nodejsnpm-v、node--version查看npm和nodejs是否已经安装卸载nodejs删除环境变量(非必要步骤)NODE_PATH删除nodejs安装目录&... 查看详情
如何配置node环境配
...ejs已经集成了npm,所以之前npm也一并安装好了。同样可以使用cmd命令行输入"npm-v"来测试是否成功安装。如下图,出现版本提示表示安装成功。常规NodeJS的搭建到现在为止已经完成了,急不及待的话你可以在”cmd“输入”node“进... 查看详情
npm,bower的安装目录
npm安装成功的话(需设置系统环境变量,见http://www.cnblogs.com/liaocheng/p/4531898.html有介绍)npm的安装目录安装nodejs时,如果没有设置以下值npmconfigsetprefix"你的安装目录"npmconfigsetcach"你的安装目录"npm文件将会安装到以下目录中C:UsersA... 查看详情
npm全局安装gulp报错解决
参考技术A近日使用npm全局安装gulp时出现报错或者可以执行npmconfiglist可以看到npm会把全局的安装包放在preifx指示的"/home/work/nodejs/bin"目录下这下了解了,原来是我们没有操作home的权限(Mac的设计初衷不让修改home目录);P... 查看详情
win7下安装配置nodejs使用npm安装express
...tps://nodejs.org/dist/v6.2.0/win-x64/node.exe它就一个exe文件,想要使用还要配置下环境变量win7:“我的电脑”右键点击“我的属性”,点击左边的‘高级系统设置&rsqu 查看详情
nodejs+grunt+npm安装
...口:node-v查看node安装版本;npm-v查看npm安装版本。//可以使用npmupdate-gnpm更新npm包管理器。4.用test.js文件测试nodeJS是否安装成功: 查看详情
nodejs使用命令整理
查看NodeJs版本号:node-v安装npm模块:npminstall-g(全局安装)模块名安装npm模块指定从某个镜像地址安装:npminstall-g(全局安装)模块名--registry=https://registry.npm.taobao.org【例如从淘宝镜像下载安装】查看所有高级的npmmoudles:npmlist--depth=0查看... 查看详情