Ubuntu 安装 Node.js 的正确姿势

若要直接查看安装 Node.js 的正确姿势,请拉到文章最后一节。

安装 Node

一般情况下,你第一次安装会这样:

首先到 Node.js 官网下载压缩包。下载得到 node-vXxx.tar.xz,然后解压到 /opt/(适用于共享用户)或 /usr/local/(适用于用户个人资料)。以 /opt/ 为例:

$ cd ~/Download
$ tar -xvf node-v10.16.3-linux-x64.tar.xz
$ sudo mv node-v10.16.3-linux-x64 /opt/node

然后将 /opt/node/bin 添加到 PATH 环境变量中,这样就可以从任意终端中执行 npm 命令了。确保环境变量生效可以执行命令看是否可以查看 node 版本。

$ node -v

这种安装方式的问题在于要更新 Node.js 版本时,要再次手动下载压缩包,替换掉原安装路径的内容,并且不小心的话会把已下载的全局 lib 给替换没了。

于是,你在官网上仔细查看,发现了 Installing Node.js via package manager,顿时感觉这包管理器安装才是正经办法。

第二次安装循着指引:

Debian and Ubuntu based Linux distributions, Enterprise Linux/Fedora and Snap packages

Official Node.js binary distributions are provided by NodeSource.

然后根据指导进行安装:

# Using Ubuntu
$ curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -
$ sudo apt-get install -y nodejs

这种安装方式下,升级不用手动下载替换了,可以使用一个 npm 模块 n 来升级,可以参见:升级node.js和npm。这里不具体展开,因为在这之前就有另外的问题让你头疼。

问题

无法下载

你安装好 Node.js 之后,准备安装一个包,常因为网络原因迟迟无法完成下载。这时候,你需要淘宝 NPM 镜像,使用方法很简单:

  • 可以使用定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 或者直接通过添加 npm 参数 alias 一个新命令:
alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"

# Or alias it in .bashrc or .zshrc
$ echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \
  --cache=$HOME/.npm/.cache/cnpm \
  --disturl=https://npm.taobao.org/dist \
  --userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc

提示无权限

npm 可以把包安装到全局目录,也可以安装到本地本地,常用的工具类的包通常是在命令行中作为命令使用,如果不安装到全局目录则在执行命令时要加上命令的路径,很不方便。

当你尝试全局安装某个包的时候,等待许久最终却看到 EACCES 错误,提示你没有权限写入用于存储全局包和命令的目录,真是令人崩溃。

两种解决办法,一种是修改全局目录为当前用户有权限的目录,具体可参考:更改npm全局包安装目录的解决方案

另一种则是既然没有权限,那加上 sudo 来执行吧:

$ sudo npm install -g xxxxx
sudo: npm:command not found

会提示找不到命令,需要参考《[译] sudo后使用别名》进行修改:

$ alias sudo='sudo '

这样就可以了,但每次安装都要 sudo 其实并不愉快。事实上,我们一开始就可以选择更合适的 Node.js 的安装方法。

NVM

NVM: 全称是 Node Version Manager, 也就是 Node 版本管理器。

如果你已经安装过了 Node,最好先把原来的卸载。

1. 卸载 Node, 可能需要 root 权限.

$ sudo apt-get remove nodejs

2. 移除你之前的全局 node_modules 包.

#执行前请确认这个包是否存在这个位置
$ sudo rm -rf /usr/lib/node_moudles

3. 安装 NVM

查看 NVM 的 Github 仓库

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

然后设置环境变量:

$ export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

4. 使用 NVM

# 将安装最新版本
$ nvm install node
# 列出可安装版本,选择安装某一版本
$ nvm list
$ nvm install 12.14.1 # or 10.10.0, 8.9.1, etc

NVM 最大的好处就是你可以安装多个版本的 node 到你的系统里,直接一条命令就可以切换版本。

$ nvm use v13.6.0

更多的使用说明可直接查看 Github 仓库的 README 文档。

现在查看使用 NVM 下载的 node 命令的目录:

$ where node
/home/mupceet/.nvm/versions/node/v13.6.0/bin/node

可以看到现在使用的目录都是在 Home 目录下,权限问题也就不成问题了,再加上淘宝 NPM 镜像,体验上就很舒服了。

参考链接

  1. Node.js 官网
  2. 升级node.js和npm
  3. 淘宝 NPM 镜像
  4. 更改npm全局包安装目录的解决方案
  5. [译] sudo后使用别名
  6. ubuntu中npm安装全局插件提示没有root管理员权限
  7. nvm-sh/nvm

原创文章来自个人博客 Mupceet

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容