如何使用二进制包安装Node.js

Node.js

1 理论部分

1.1 Node.js简介

– Node.js是运行在服务端的JavaScript
– Node.js是基于Chrome JavaScript运行时建立的一个平台
– Node.js是事件驱动I/O服务端JavaScript环境,基于Google的V8引擎
注:V8引擎执行Javascript的速度非常快,性能非常好

1.2 npm的概念

NPM是JavaScript开发人员可以轻松共享和重用代码,并且可以更轻松更新你所共享的代码。

1.3 npm包的分类

1.3.1 全局安装与全局npm包

– 通过“npm install -g ”命令生成
– 在任一目录下通过require函数传递npm包的绝对路径引用
– 无法通过npm包名称直接引用

1.3.2 本地安装与本地npm包

– 项目文件夹内通过“npm install ”命令生成
– 项目文件夹内可直接通过require函数传递本地npm包名称引用
– 本地安装的项目文件夹支持自定义(如,/var/www/project1)

2 最佳实践

2.1 准备工作

2.1.1 安装辅助工具

yum install -y git

2.1.2 下载软件包

cd ~
wget https://nodejs.org/dist/v10.16.2/node-v10.16.2-linux-x64.tar.xz

注:其他版本请从以下链接下载,
https://nodejs.org/dist/

2.1.3 解压软件包

cd ~
tar -xf node-v10.16.2-linux-x64.tar.xz

2.2 配置软件包

2.2.1 部署软件包

mv node-v10.16.2-linux-x64 /usr/local/
chown root:root -R /usr/local/node-v10.16.2-linux-x64/
chown 775 -R /usr/local/node-v10.16.2-linux-x64/

2.2.2 配置环境变量

vim /etc/profile.d/nodejs.sh

加入如下配置,

# Nodejs

VERSION=v10.16.2
DISTRO=linux-x64
export NODEJS_HOME=/usr/local/node-${VERSION}-${DISTRO}
export PATH=${NODEJS_HOME}/bin:$PATH

配置完成后,你需要使用如下命令导入环境变量,

source /etc/profile.d/nodejs.sh

配置完成后,我们建议你使用如下命令测试node,

node -v

可见如下显示,

v10.16.2

配置完成后,我们建议你使用如下命令测试npm,

npm version

可见如下显示,

{ npm: '6.9.0',
  ares: '1.15.0',
  brotli: '1.0.7',
  cldr: '35.1',
  http_parser: '2.8.0',
  icu: '64.2',
  modules: '64',
  napi: '4',
  nghttp2: '1.34.0',
  node: '10.16.2',
  openssl: '1.1.1c',
  tz: '2019a',
  unicode: '12.1',
  uv: '1.28.0',
  v8: '6.8.275.32-node.54',
  zlib: '1.2.11' }

配置完成后,我们建议你使用如下命令测试npx,

npx -v

可见如下显示,

6.9.0

2.2.3 增加运行用户

groupadd -g 548 nodejs
useradd -u 548 -g 548 -d /var/lib/nodejs/ nodejs

配置完成后,我们建议你使用如下命令测试node、npm和npx,

su - nodejs
node -v
npm version
npx -v

2.2.4 配置sudo软链接

ln -s /usr/local/node-v10.16.2-linux-x64/bin/node /usr/bin/
ln -s /usr/local/node-v10.16.2-linux-x64/bin/npm /usr/bin/
ln -s /usr/local/node-v10.16.2-linux-x64/bin/npx /usr/bin/

配置完成后,我们建议你使用如下命令测试node、npm和npx,

sudo -iu nodejs node -v
sudo -iu nodejs npm version
sudo -iu nodejs npx -v

使用参数“i”是为避免程序以nodejs普通用户身份扫描root的家目录而报以下错误,

Error: EACCES: permission denied, scandir '/root'
(node:38741) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'loaded' of undefined
    at exit (/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/utils/error-handler.js:98:27)
    at errorHandler (/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/utils/error-handler.js:216:3)
    at /usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/bin/npm-cli.js:77:20
    at cb (/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/npm.js:225:22)
    at /usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/npm.js:263:24
    at /usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/config/core.js:83:7
    at Array.forEach ()
    at /usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/config/core.js:82:13
    at f (/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/node_modules/once/once.js:25:25)
    at /usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/config/core.js:112:20
(node:38741) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:38741) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
TypeError: Cannot read property 'loaded' of undefined
    at process. (/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/utils/error-handler.js:40:18)
    at process.emit (events.js:198:13)
/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/utils/error-handler.js:98
  var doExit = npm.config.loaded ? npm.config.get('_exit') : true
                          ^

TypeError: Cannot read property 'loaded' of undefined
    at exit (/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/utils/error-handler.js:98:27)
    at process.errorHandler (/usr/local/node-v10.16.2-linux-x64/lib/node_modules/npm/lib/utils/error-handler.js:216:3)
    at process.emit (events.js:198:13)
    at process._fatalException (internal/bootstrap/node.js:496:27)

2.2.5 设置全局目录

su - nodejs
npm config get prefix

命令行显示当前全局目录的默认路径,

/usr/local/node-v10.16.2-linux-x64

使用如下命令修改全局目录的默认路径,

su - nodejs
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'

使用如下命令验证全局目录的路径是否被修改,

su - nodejs
npm config get prefix

命令显示如下,

/var/lib/nodejs/.npm-global

2.2.6 设置全局目录的环境变量

su - nodejs
cd ~
vim .bash_profile

加入如下行,

# Nodejs_Global
export NODEJS_GLOBAL_HOME=/var/lib/nodejs/.npm-global
export PATH=${NODEJS_GLOBAL_HOME}/bin:$PATH

保存并退出后,执行以下命令导入环境变量,

source .bash_profile

2.2.7 设置国内的源

su - nodejs
npm config get metrics-registry

命令行显示当前源服务器地址,

https://registry.npmjs.org/

使用如下命令修改源服务器地址,

su - nodejs
npm config set metrics-registry 'http://registry.npm.taobao.org'

安全连接请使用“https://registry.npm.taobao.org”,修改完毕后,使用如下命令确认配置,

su - nodejs
npm config get metrics-registry

命令显示如下,

http://registry.npm.taobao.org

2.3 常用的操作参考

如果你不熟悉常用的操作,请参阅如下链接,
https://www.cmdschool.org/archives/570

参阅文档
=================

官方首页
———-
https://nodejs.org/en/

下载链接
———–
https://nodejs.org/dist/
https://nodejs.org/en/download/

二进制的安装方法
————-
https://github.com/nodejs/help/wiki/Installation

包管理器的安装方法
—————-
https://nodejs.org/en/download/package-manager/

源代码的构建方法
————————
https://github.com/nodejs/node/blob/master/BUILDING.md#building-nodejs-on-supported-platforms

非官方参考
—————-
https://degreesofzero.com/article/how-to-install-nodejs-as-a-non-root-user.html

没有评论

发表回复

Node.js
如何使用yapi-cli部署YApi?

1 基础知识 1.1 YApi的简介 – YApi是高效、易用、功能强大的API管理平台 …

Node.js
如何部署Hoppscotch?

1 基础知识 2.1 基本概念 2.1.1 Rest API – Rest API用户应 …

Node.js
如何使用yum安装nodejs?

1 理论部分 1.1 Node.js简介 – Node.js是运行在服务端的JavaSc …