简介

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 
Node.js 的包管理器 npm,是全球最大的开源库生态系统。

英文网址:https://nodejs.org/en/
中文网址:http://nodejs.cn/

Nodejs安装

版本选择:【官方目前有两种版本,一种是长期稳定版,另一种是开发版,推荐使用长期稳定版】

Long Term Support:长时间支持版本【简写LTS】

操作步骤:

依赖python2.7

(一) 编译好的文件

#下载
wget https://nodejs.org/dist/v8.5.0/node-v8.5.0-linux-x64.tar.xz #解压该文件
tar -xvf node-v8.5.0-linux-x64.tar.xz #存放路径
mv node-v8.5.0-linux-x64 /app/
ln -s node-v8.5.0-linux-x64 node #修改/etc/profile,添加环境变量
#SET PATH FOR NODEJS
export NODE_HOME=/app/node
export PATH=$NODE_HOME/bin:$PATH #使环境变量生效
source /etc/profile #运行node -v显示nodejs的版本号则安装配置成功
node -v

(二)通过源码编译

tar -zxvf node-v8.5.0.tar.gz
cd node-v8.5.0
./configure
make
make install
cp /usr/local/bin/node /usr/sbin/ 查看当前安装的Node的版本
node -v
v8.5.0

pm2安装及卸载

#安装pm2,pm2是node进程管理器
npm install -g pm2
#卸载pm2,需要删除家目录隐藏的目录.pm2
npm uninstall -g pm2
mv /root/.pm2 /tmp

测试

#1. 添加测试文件helloworld.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/'); #2. pm2启动:
pm2 start helloworld.js --name 'helloworld' [root@120 www]# pm2 start helloworld.js --name 'helloworld'
[PM2] Starting /app/www/helloworld.js in fork_mode (1 instance)
[PM2] Done.
┌────────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├────────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ helloworld │ 0 │ fork │ 25376 │ online │ 0 │ 0s │ 28% │ 20.3 MB │ root │ disabled │
└────────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app #3. 把pm2加入开机启动
pm2 startup centos [root@120 www]# pm2 startup centos
[PM2] Init System found: systemd
-----------------------------------------------------------
PM2 detected systemd but you precised centos
Please verify that your choice is indeed your init system
If you arent sure, just run : pm2 startup
-----------------------------------------------------------
Platform centos
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target [Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/app/node-v8.5.0-linux-x64/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid ExecStart=/app/node-v8.5.0-linux-x64/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/app/node-v8.5.0-linux-x64/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/app/node-v8.5.0-linux-x64/lib/node_modules/pm2/bin/pm2 kill [Install]
WantedBy=multi-user.target Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'chmod +x /etc/systemd/system/pm2-root.service',
'systemctl enable pm2-root',
'systemctl start pm2-root',
'systemctl daemon-reload',
'systemctl status pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
>>> Executing chmod +x /etc/systemd/system/pm2-root.service
[DONE]
>>> Executing systemctl enable pm2-root
Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-root.service to /etc/systemd/system/pm2-root.service.
[DONE]
>>> Executing systemctl start pm2-root
[DONE]
>>> Executing systemctl daemon-reload
[DONE]
>>> Executing systemctl status pm2-root
● pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2017-12-11 11:49:13 CST; 142ms ago
Docs: https://pm2.keymetrics.io/
Main PID: 25245 (PM2 v2.8.0: God)
CGroup: /system.slice/pm2-root.service
‣ 25245 PM2 v2.8.0: God Daemon (/root/.pm2) 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: [PM2] Restoring processes located in /root/.pm2/dump.pm2
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: ┌────────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: ├────────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: │ helloworld │ 0 │ fork │ 25376 │ online │ 0 │ 3m │ 0% │ 21.6 MB │ root │ disabled │
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: └────────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: Use `pm2 show <id|name>` to get more details about an app
12月 11 11:49:13 120.234.2.74_centos7 systemd[1]: Started PM2 process manager.
[DONE]
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save [PM2] Remove init script via:
$ pm2 unstartup centos #4. 保存更改
[root@120 www]# pm2 save

PM2常用命令

# 启动命令,推荐使用pm2 run npm 方式启动
# 参考链接:https://newsn.net/say/node-pm2-start.html
$ pm2 run npm -start --name invoice # invoice别名 $ pm2 start app.js # 启动app.js应用程序 # 4个应用程序会自动进行负载均衡
$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例 $ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
$ pm2 start app.js --watch # 当文件变化时自动重启应用
$ pm2 start script.sh # 启动 bash 脚本 $ pm2 list # 列表 PM2 启动的所有的应用程序
$ pm2 monit # 显示每个应用程序的CPU 和内存占用情况
$ pm2 show [app-name] # 显示应用程序的所有信息 $ pm2 logs # 显示所有应用程序的日志
$ pm2 logs [app-name] # 显示指定应用程序的日志
$ pm2 flush $ pm2 stop all # 停止所有的应用程序
$ pm2 stop 0 # 停止 id为 0的指定应用程序
$ pm2 restart all # 重启所有应用
$ pm2 reload all # 重启 cluster mode下的所有应用
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
$ pm2 delete all # 关闭并删除所有应用
$ pm2 delete 0 # 删除指定应用 id 0
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
$ pm2 reset [app-name] # 重置重启数量 $ pm2 startup # 创建开机自启动命令
$ pm2 save # 保存当前应用列表
$ pm2 resurrect # 重新加载保存的应用列表
$ pm2 update # Save processes, kill PM2 and restore processes
$ pm2 generate # Generate a sample json configuration file

Yarn包管理工具安装

yarn和npm对比:

、yarn.lock 文件
在 npm 中同样可以使用 npm shrinkwrap 命令来生成一个锁文件,这样在使用 npm install 时会在读取 package.json 前先读取这个文件,就像 Yarn 会先读取yarn.lock 一样。这里的区别是 Yarn 总会自动更新 yarn.lock,而 npm 需要你重新操作。
、并行安装
每当 npm 或 Yarn 需要安装一个包时,它会进行一系列的任务。在 npm 中这些任务是按包的顺序一个个执行,这意味着必须等待上一个包被完整安装才会进入下一个;Yarn 则并行的执行这些任务,提高了性能。
、清晰的输出
npm 默认情况下非常冗余,例如使用 npm install 时它会递归列出所有安装的信息;而 Yarn 则一点也不冗余,当可以使用其它命令时,它适当的使用 emojis 表情来减少信息(Windows 除外)

正式使用:

、安装yarn
打开命令行输入并执行下面指令安装yarn包管理工具
npm i yarn -g --verbose 、更换源地址
npm官方源虽然在国内没有被墙,但访问速度仍然不敢恭维,因此次建议使用之前切换为淘宝镜像,在yarn安装完毕之后执行如下指令:
yarn config set registry https://registry.npm.taobao.org 到此为止我们就可以在项目中像使用npm一样使用yarn了。

常用指令:

yarn / yarn install 等同于npm install 批量安装依赖
yarn add xxx 等同于 npm install xxx —save 安装指定包到指定位置
yarn remove xxx 等同于 npm uninstall xxx —save 卸载指定包
yarn add xxx —dev 等同于 npm install xxx —save-dev
yarn upgrade 等同于 npm update 升级全部包
yarn global add xxx 等同于 npm install xxx -g 全局安装指定包

总结:

在批量安装包文件时,yarn的安装速度远胜于npm,但是相对于老牌npm,yarn目前仍然不是很稳定,偶尔会导致包安装出现问题,大家可以根据个人情况来决定是否使用。

npm常用命令

# 安装依赖库
cd 项目目录
npm i # 构建
npm run build # 启动nodejs程序
cd 项目目录
pm2 start dist/index.js 启动命令,如果研发添加了server命令:
npm run server # 删除pm2任务
pm2 delete ID号 # 删除全部任务
pm2 delete all # 重启pm2任务
pm2 restart ID号 # 查看启动日志
pm2 logs

yarn常用命令

# 安装依赖
yarn

nodejs基础【持续更新中】的更多相关文章

  1. Pig基础学习【持续更新中】

    *本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.* Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的,可以作为MapR ...

  2. Pig语言基础-【持续更新中】

      ***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.***   Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...

  3. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  4. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  5. 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

    Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...

  6. 史上最全的spark面试题——持续更新中

    史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题   版权声明:本文为博主原创文章,遵循C ...

  7. 2020年腾讯实习生C++面试题&持续更新中(5)

    2020年腾讯实习生C++面试题&持续更新中(5) 大家好呀,我是好好学习天天编程的天天~ 昨天一位小伙伴反馈已经拿到了腾讯offer,很是替小伙伴的激动~ 那今天还是持续给大家分享面经,希望 ...

  8. 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...)

    目录 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...) Java书写规范 IDEA的一些常用快捷键 Java类中作为成员变量的类 Java源文件中只能有一个public类 Java中 ...

  9. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  10. Atom使用记录(持续更新中)

    部分内容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持续更新中 Atom安装插件在窗口中File---Setting---install 在里面进 ...

随机推荐

  1. 由于link顺序错误导致的undefined reference

    其实我之前就遇到过这个问题,也强调过,GNU-G++在link阶段是依赖输入的.o或者.a文件的顺序的.如果顺序错误会导致undefined reference错误 见这篇随笔:http://www. ...

  2. DIV中display和visibility属性差别

    DIV中display和visibility属性差别 DIV中display和visibility属性差别还是挺大的,虽然Visibility和Display属性都可以达到隐藏页面元素的目的,但它们的 ...

  3. C#中利用JQuery实现视频网站的缩略图采集

    最近有朋友想要采集优酷的视频标题和缩略图 (哈哈, 并非商业目的). 找到我帮忙, 考虑到有我刚刚发布的SpiderStudio, 我毫不犹豫的答应了. 首先在网页上视频的基本结构为: div.v - ...

  4. Java的多线程 简单入门

    Java的多线程 简单入门 首先能够先搞清楚什么是程序.进程.线程,以及它们之间的关系: 定义: 一 程序仅仅是一组指令的有序集合.它是静态的 二 进程是具有一定独立功能的程序关于某个数据集合上的一次 ...

  5. ngx_lua 随笔

    --[[ test --]] ngx.header.content_type = "text/plain"; --输出头部 local user = ngx.var.arg_use ...

  6. C#调用系统API

    API简介 1) C#中的简单数据类型与API中的数据类型对应关系 2) 如何在调用API时传递复杂参数:封装类.结构和联合 3) 如何调用API 4) 如何确保成功调用API

  7. JQuery操作表单相关使用总结

    select下拉列表onChange事件之JQuery实现: JQuery: $(document).ready(function () { $("#selectMenu").bi ...

  8. NodeJS与Javascript时代

    如果你一直在关注互联网的相关技术,你应该会有这样一种感觉,web技术正在发生着变革,虽然我们不愿相信,但一个事实已经越来越清晰的摆在了眼前:LAMP组合的时代将要成为历史,在web诞生的二十年间,它影 ...

  9. 第二百五十五节,Bootstrap项目实战--关于

    Bootstrap项目实战--关于 html <!DOCTYPE html> <html lang="zh-cn"> <head> <me ...

  10. 基于Unity5的TPS整理

    1.游戏管理器 游戏管理器负责管理游戏的整体流程,还可以系统管理用于游戏的全局数据以及游戏中判断胜败的条件.游戏管理器并不是单一的模块,更像是能控制游戏的功能集合.1)怪兽出现逻辑:专门设置一些位置用 ...