
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
没有评论