Node.js简介与安装.md
[TOC]
(1)Node.js 简介与安装
1.Nodejs简介 Node.js是目前非常火热的技术(正式开启JavaScript的后端开发之旅),但是它的诞生经历却很奇特。
Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务,对于高性能,异步IO、事件驱动是基本原则,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以最终Ryan瞄向了JavaScript;
因为JavaScript是单线程执行,根本不能进行同步IO操作,所以JavaScript的这一“缺陷”导致了它只能使用异步IO。 于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。
Tips版本发展历史: 因为Node.js是开源项目,虽然由社区推动但幕后一直由Joyent公司资助。由于一群开发者对Joyent公司的策略不满,于2014年从Node.js项目fork出了io.js项目,决定单独发展,但两者实际上是兼容的,分家后没多久,Joyent公司表示要和解,于是io.js项目又决定回归Node.js。 具体做法是将来io.js将首先添加新的特性,如果大家测试用得爽,就把新特性加入Node.js,io.js是“尝鲜版”,而Node.js是线上稳定版,相当于Fedora Linux和RHEL的关系。
Q:Node上运行的JavaScript相比其他后端开发语言有何优势? 答:借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务轻而易举。
Q:什么是Nodejs? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,没有浏览器安全级别的限制提供很多系统级别的API; 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效.
- 文件IO
- 进程管理
- 网络通信
Node.js优点:
- JavaScript语言本身是完善的函数式语言,使用最新的ECMAScript6标准
- 模块化的Js代码,加上函数式编程
- 使其轻量又高效
- 后端开发语言
2.Nodejs安装 对于Windows安装不多说,侧重于linux下面进行开发和编程nodejs; 安装完成后,在Windows环境下,请打开命令提示符,然后输入node -v,如果安装正常,你应该看到这样的输出:
C:UsersAdministrator>node -v
v9.3.0
Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/ (国内:http://nodejs.cn/download/)
安装环境:CentOS Linux release 7.6.1810 (Core) [强烈建议使用Centos 7.x] 安装步骤:
#1.使用nvm维护多个版本的node.js
https://github.com/creationix/nvm
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
$ source /root/.bashrc
$ command -v nvm #返回nvm 表示安装成功
[[email protected] nodejs]$ nvm --version
0.34.0
#配置加速镜像
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
#2.安装node.js
$ nvm ls-remote #查看nodejs版本
v10.15.3 (Latest LTS: Dubnium)
$ nvm install 10.15.3 #安装当前稳定版本
Creating default alias: default -> 10.15.3 (-> v10.15.3)
#查看当前脚本
$ node -v
v10.15.3
#3.安装npm(安装插件依赖)
$ npm -v #其实安装node后默认已经被安装
6.7.0
补充:源码安装 执行步骤:
#官网下载源码包
wget https://npm.taobao.org/mirrors/node/v10.15.3/node-v10.15.3.tar.gz
./configure --prefix=/usr/local/nodejs #注意后面这个参数
make && make install
补充:Windows环境变量 配置npm的全局模块的存放路径以及cache的路径
#便在NodeJs下建立“node_global”及“node_cache”两个文件夹。我们就在cmd中键入两行命令:
npm config set prefix "D:Program Filesnodejsnode_global"
npm config set cache "D:Program Filesnodejsnode_cache"
#设置系统变量。进入我的电脑→属性→高级→环境变量在系统变量下新建“NODE_PATH”,输入“D:Program Filesnodejsnode_globalnode_modules”
3.Nodejs简单使用 采用Node.js编写的JavaScript代码将直接在你的计算机上以命令行的方式运行;
注意:
- 请注意绝对不能用Word和写字板,导致程序运行出现莫名其妙的错误;
进入Node.js的交互环境,在交互环境下,你可以输入任意JavaScript语句例
# Node交互模式 和 命令行模式
[[email protected] ~]$ node
> 1024 * 4
4096
> console.log("Hello wrold!Node.js")
Hello wrold!Node.js
> function add(x,y){console.log(x + "+" + y + "=",x+y)}; add(6,9)
6+9 = 15
> process #调用执行系统级别的API
# 采用js文件执行
[[email protected] Day1]# vim index.js
'use strict'; #第一行总是写上'use strict';是因为我们总是以严格模式运行JavaScript代码,避免各种潜在陷阱。
console.log('Hello, world.');
[[email protected] Day1]# node index.js
Hello World!Node.js
#利用npm安装nodemon包让文件自动检测执行js变化
cnpm install nodemon -g
-rw-r--r-- 1 root root 36 4月 11 09:25 index.js
[[email protected] Day1]$ nodemon index.js
[nodemon] 1.18.11
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
Hello World!Node.js
[nodemon] clean exit - waiting for changes before restart
(2) nodejs命令解析
2.1 nvm 命令
NVM 是一个管理多个nodejs版本工具
nvm ls #当前版本信息
nvm ls-remote #远程版本信息
nvm install node #安装node最新版本
nvm install --lts #安装node最新稳定版本
Installing latest LTS version.
v10.15.3 is already installed.
Now using node v10.15.3 (npm v6.4.1)
Example:
nvm install 8.0.0 Install a specific version number
nvm use 8.0 #切换版本
nvm run 6.10.3 index.js Run app.js using node 6.10.3
nvm exec 4.8.3 node app.js Run `node app.js` with the PATH pointing to node 4.8.3
nvm alias default 8.1.0 Set default node version on a shell
nvm alias default node Always default to the latest available node version on a shell
##项目下面指定版本号 采用 nvm run index.js 直接执行
$ vim .nvmrc
10.15.3
$ nvm use #进行使用该版本运行(通过我们项目文件nvmrc读取版本号进行切换)
2.2 nodejs 命令
node --use_strict calc.js #使用严格模式当文件内没加入'use strict'时候
2.3 npm 命令
npm其实是Node.js的包管理工具(package manager),通过CommonJS实现,大家都把自己开发的模块打包后放到npm官网上,然后通过npm安装就可以直接用;
- 解决依赖性问题,解放双手;
- 学习如何版本控制,下载/删除包等等操作
- 升级 node 就升级了npm
npm install -g cnpm --registry=https://registry.npm.taobao.org #使用淘宝镜像安装 https://npm.taobao.org/ 来使用cnpm 进行安装(比较快)
#package.json配置信息 (项目依赖/开发依赖)
npm init #初始化项目产生 package.json 配置信息
npm install <pkg> #利用这个命令安装 package .json 里面的模块
npm install request --save #将下载的包保存在项目配置信息里面 (删除就是uninstall)
npm install babel-cli --save-dev #-D => 将下载的包保存在项目配置信息(开发依赖)里面
npm list #显示项目里面安装那些模块
npm cache clean #清除模块下载缓存
########实例#######
npm install nodemon -g #--global = 全局安装nodemon包 (外国源比较慢)
npm install forever #项目中安装该模块
npm uninstall forever -g #全局删除 forever 包
npm install n -g #更新npm与mode.js
n stable #nodejs也更新
#指定版本安装模块
npm info 模块名 #查看可用版本
npm i 模块名@版本
npm outdated #显示项目中需要更新的模块 在pakeage.json (^1.1.0)-保留主版本号不变 (~1.1.2) (*)-安装最新版本
#验证/切换源下载时间
npm i nrm -g
nrm ls #显示下载源
nrm test #测试源的链接时间
nrm use tabao #切换到淘宝源
(3) Win下IDE开发配置
我们需要一个IDE集成开发环境,让我们能在一个环境里编码、运行、调试,这样就可以大大提升开发效率。 Java的集成开发环境有Eclipse,Intellij idea等,C#的集成开发环境有Visual Studio,Node.js的集成开发环境Visual Studio Code
在VS Code中,我们可以非常方便地运行JavaScript文件。 VS Code以文件夹作为工程目录(Workspace Dir),所有的JavaScript文件都存放在该目录下。此外VS Code在工程目录下还需要一个.vscode的配置目录,里面存放里VS Code需要的配置文件。
可以用VS Code快速创建launch.json,然后修改如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Run hello.js",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/hello.js",
"stopOnEntry": false,
"args": [],
"cwd": "${workspaceRoot}",
"preLaunchTask": null,
"runtimeExecutable": null,
"runtimeArgs": [
"--nolazy"
],
"env": {
"NODE_ENV": "development"
},
"externalConsole": false,
"sourceMaps": false,
"outDir": null
}
]
}
有了配置文件,即可使用VS Code调试JavaScript。
'use strict'
var name = "Weiyi";
var hel = `你好,${name}Geek 欢迎学习NODE.JS`;
console.log(hel);
WeiyiGeek.VScode
(4) nodejs入坑记
Q;问题1安装node.js爆出C++版本过低?
问题:Centos6.10 升级 C++ compiler too old, need g++ 4.9.4 or clang++ 3.4.2 (CXX=g++)
#解决方式:由于yum不能进行升级所以手动
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.gz
tar -zvxf gcc-6.1.0.tar.gz --directory=/usr/local/
cd /usr/local/gcc-6.1.0
./contrib/download_prerequisites
mkdir build && cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make && make install
#上面下载依赖可以自己进行下载
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.15.tar.bz2
##安装完成
$ ls /usr/local/bin | grep gcc
gcc
i686-pc-linux-gnu-gcc
$ gcc -v
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/6.1.0/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
Thread model: posix
gcc version 6.1.0 (GCC)
#(重要)升级gcc生成的动态库没有替换老版本gcc的动态库 (注意系统版本 是i686 是 x64_86) 下面以i686为例
find / -name "libstdc++.so*" #查找编译gcc时生成的最新动态库:
#最新动态库libstdc++.so.6.0.22复制到/usr/lib64目录下
cp /usr/local/gcc-6.1.0/build/i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 /usr/lib/
rm -rf libstdc++.so.6 #删除原来软连接:
ln -s libstdc++.so.6.0.22 libstdc++.so.6 #将默认库的软连接指向最新动态库
strings /usr/lib/libstdc++.so.6 | grep GLIBC #默认动态库升级完成运行以下命令检查动态库:
GLIBCXX_3.4.22
Q;问题2安装node.js爆出Python+版本过低?
#由于前面安装的是centos6.10 默认版本python2.6
wget https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tgz
./configure --enable-optimizations --prefix=/usr/local/python2.7
- 【jfinal修仙系列】扩展ShiroCacheManager 支持Redis缓存
- 【springboot】 springboot 整合mybatis-plus
- jfinal-swagger让你的应用接口更加简单
- 【springboot】 spring session 分布式会话共享
- 基于jfinal Template的Shiro 标签
- 基于Spring Cloud 少量配置完成单点登录开发
- Spring 必知概念(一)
- 如何在EHAB(EntLib)中定义”细粒度”异常策略?
- MVC、MVP以及Model2[下篇]
- Dora.Interception: 一个为.NET Core度身定制的AOP框架
- 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]
- 关于Expression Tree和IL Emit的所谓的"性能差别"
- 采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]
- 采用一个自创的"验证框架"实现对数据实体的验证[改进篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 想成为可视化高手?这篇合集就够了 | Vue
- 谈谈Vue开发过程中用到的插件
- 快速入门使用tikz绘制深度学习网络图
- why哥被一道基础面试题给干懵了,一气之下写出万字长文。
- 结构与算法(03):单向链表和双向链表
- 有赞crash平台符号化实践
- 什么是时间分片(Time Slicing)?
- 逐行分析鸿蒙系统的 JavaScript 框架
- 48张小图带你领略Flex 布局之美
- 怎样设计一个 JavaScript 插件系统
- 一道 React 面试题:在浏览器、组件和元素中都渲染了些什么?
- 「新手入门福利」一张脑图带你掌握Git命令
- LeetCode | 58.最后一个单词的长度
- 模拟面试,解锁大厂 ——从Android的事件分发说起
- scRepertoire||单细胞免疫组库分析:R语言应用(一)