node第二天
node第二天
1.0各种shell:
1.1什么是shell:
就是系统内核的一层壳,作用是保护内核同时传递人与计算机交互的信息。它只是系统的一个工具,我们可以使用它来操作计算器。
1.2常用的shell:
1)CMD:
windows + r 打开面板中输入cmd回车
特点:很多都是window下面的指令
2)powerShell:
特点:它能够兼容windows和 (linux ,uinx)下面的指令
Osx -> unix
3)git bash:
特点:它能够兼容windows和 *inux (linux ,uinx)下面的指令
1.3常用的shell指令:
1) cd:用于改变路径,在三种形式
(1) cd ./=》当前目录,
(2) cd ../=》回到上级目录,
(3) cd a=》在当前目录下去找有a文件夹
注意点:
a)如果要改变盘符,在cmd中要先转换到对应的盘符上去,再进入子文件夹;如果是powershell可以直接跨盘符。
b)如果要改变盘符,在cmd中不用加上cd
2) clear/cls:清屏,清除当前shell中的内容
(1) cmd中清屏只能用cls
(2) powershell中清屏既可以用clear,又可以用cls
3) dir/ls 列出当前目录下所有的文件
(1) cmd中列出目录只能用dir
(2) powershell中列出目录既可以用dir,又可以用cls
4) tree 使当前目录下所有的文件结构(只包含文件夹)以树状显示出来
1.4 shell的其它作用:打开应用程序
步骤:
1. 在shell转到要打开应用程序所在的路径,
2. 在shell中输入".\"加上应用程序的名字
2.0环境变量:
2.1作用
用于指定系统文件的默认打开路径,当在cmd/powershell/运行中打开文件时会,除了在当前目录下面去找对应的文件以外还有会环境变量对应的目录下面去文件。
2.2分类
用户变量:只有当前登录的用户才能使用
系统变量:所有的用户都能使用到
3.0Nodejs的安装
3.1方法一:直接使用nodejs的安装包
使用注意点:不建议使用。因为nodejs更新换代太快,如果出了新的版本就重新安装一次太浪费时间。
3.2方法二:使用nvm来安装:
优点:
1)可能同时管理多个nodejs版本
2)更新了新的nodejs只需要知识版本号就可以通过nvm来下载了
安装步骤:
1)下载nvm工具,并安装(设置两个路径:一个是nvm存放的路径,另一个是nodejs存放的路径)
2)打开nvm,通过指令来安装node:
nvm install nodejs的版本号 + 回车 可以下载对应版本的nodejs.
3.3nvm,nodejs,npm之间的关系:
nvm:nodejs的版本管理工具,可以下载nodejs以及改变正在使用的nodejs的版本
nodejs:提供node环境,其中集成大量的核心模块
npm:每个版本的nodejs都自带的一个工具,他们以帮助nodejs去上传和下载新的第三方包
4.0nvm的常用指令:
1)nvm list
-查看当前已安装的所有nodejs版本
2)nvm install nodejs的版本号
-安装指定版本的nodejs
3)nvm uninstall nodejs的版本号
-卸载指定版本的nodejs
4)nvm use nodejs的版本号
-将指定的nodejs版本设定为当前使用的nodejs环境
注意问题:
1)如果直接安装nvm的话是没有nodejs版本的,所以一般安装完nvm以后要通过nvm指令再次安装需要的nodejs版本。
2)nvm安装nodejs其实就是从互联网上将nodejs对应的版本下载到nvm所在的目录下的文件夹下,当文件下载完成以后文件中的nodejs的小图标会变成nodejs的六边形图标,如果不是,并且下载也停止了,说明下载失败,请卸载后重新下载。
3)版本下载完成之后需要通过nvm use 指令来使用对应的nodejs版本,使用版本的本质上将下载好的文件拷贝到安装nodejs的目录下面。
4)通过node -v可以查看使用的node的版本
5)如果用的是苹果的osx系统请使用tnvm(淘宝出的一款在苹果电脑上安装nodejs的版本工具)
5.0什么是nodejs
5.1定义:
Node.js是一个Javascript除浏览器之外可以运行的另一个环境(runtime)。
5.2特点:
1)基于google浏览器的v8引擎
2)事件驱动、非阻塞I/O
3)因为第二个特点,nodejs相比其它的后台语言要高效、轻量。
4)开源并且跨平台。
5.3学习网站:
1)nodejs.org
评价:nodejs的官网,主要作用是下载nodejs的版本,以及查看它的帮助文档
2)npmjs.com
评价:nodejs的开源包管理网站,将来如果某些功能在nodejs还不存在,可以直接去npm中找对应的开源包,或者自己有一些好的点子写成了代码,也可以放到npm上(缺点:是一个国外网站,而且是纯英文的)。
淘宝也通过将国外的网站所有包下载下来做了一个克隆版本(镜像地址:https://npm.taobao.org/),这个镜像版本仅仅只是为了提高国内开发人员的下载速度,并不是说它里面的内容是中文的。
3)github.com
评价:全球最大的开源托管库,可以在上面找各种程序的源代码以及分享源文件
4)stackoverflow.com
评价:全球最大的问答社区
5)google.com
评价:搜索技术文章或者解决程序上的一些问题(一般建议上google)
6.0node的使用:
nodejs运行有两种模式:
1)REPL:交互式运行环境(给开发人员的测试有模式)
在shell中直接输入node敲击回车,会进入REPL模式。可以在这个模式下面自己写一些js代码来测试效果。
REPL环境中的常用指令:
- ctrl + c 两次:退出REPL环境
- ctrl + d 一次:退出REPL环境
- .exit 退出REPL环境
- ↑↓:查看RPEL的历史操作记录
- _: 得到上一次操作的结果
- tab:查看nodejs中的API
- .save fileName:以js文件的形式将当前REPL会话保存到硬盘中
- .load fileName: 将硬盘中的js文件以REPL的形式读取出来
2)正常开发模式(执行js文件)
使用步骤:
1)写好一个js文件
2)在js文件所在的位置打开powershell,输入指令node fileName.js能得到js的执行结果。
3)也可以在sublime中安装terminal插件(ctrl+shift+p ->package controll:install -->terminal)
案例:用nodejs写一个js文件去执行,再写一个服务器去给大家访问
7.0nodejs的常用API:
1)global对象:
作用:全局对象。类似于javascript中的window对象
什么是全局对象:在nodejs中,所有的js都有运行在node环境下的,在这个环境中可以直接使用很多方法和属性,而管理这些方法和属性的对象就叫做全局对象。
golbal中的方法和属性:
1. global.setTimeout(function(){},time);
//异步执行的方法
2. global.setImmeditate(function(){})
//异步执行的方法(优先级要高于setTimeout)
对比:process.nextTick(function(){});//异步执行的另一个方法(优先级比上面两个都高)
总结:三个方法都是异步执行的代码,如果同时放在一起,nextTick优先级最高,setImmediate其次,setTimeout最低。常用的是setTimeout.
全局对象中的方法在任何js文件中都可以直接使用,不需要通过require方法再单独导包。而其它非全局对象中的方法如果要使用的话需要导包(如:要使用http中的方法需要require('http'))
3. __dirName:得到当前文件所在的路径(这个属性虽然是列在全局对象,但是它得到的却是具体某个js文件中的路径,也就是说每个文件都有一个。每个文件中都有的对象我们把他叫做伪全局对象)
对比:process.cwd:得到当前文件的执行路径:执行路径与文件所在路径不一样
4. __fileName: 得到当前文件的全路径(物理路径+文件名),它与__dirName一样,也是一个伪全局对象。
5. process对象:
process.abort()//立即结束js代码的运行,下面的代码不再执行
process.arch() //得到当前运行环境所在平台
porcess.argv() //得到当前文件的执行参数
返回值为一个数组,数组中的第一个值,第二个值为默认值,分别为当前repl环境的执行进程,以及当前node执行的js文件的绝对路径(__fileName)
如果将来执行js文件的时候手动传入了参数,那么这些参数会按顺序被添加到argv的数组中。
应用:写一个命令行版的小型计算器
process.env //得到当前操作系统中环境变量
应用:用于区别生产环境和正式环境(通过执行时传入set 变量值=变量名 && node 运行程序来执行。注意:powershell中不认识&&指令,必须要去cmd中执行)
process.stdout.write()//输出内容
console.log的底层其实就是通过这个方法来输出的。
process.stdout.write输出的只能是字符串,并且不带换行
应用:使用这个方法完成命令行的小动画
process.stdin //监控输入的对象
process.stdin.on('readable',function(){})//当输入内容敲击回车时会触发这个事件中的回调函数
process.stdin.read();
得到在输入回车前输入的内容(以二进制的形式得到的,如果直接输出会以buffer数组的形式输出,toString以后才会转为字符串)
2) root对象
这个对象与global对象是一样的都是一个全局函数(可以理解为root是global的别名)
小练习:在不引入其它的文件的基础上在一个文件中引入另一个文件中的变量
注意点: 在REPL环境中定义的所有的变量都会加载到全局对象中,在单个js文件的中定义的变量,只要不是定义在全局对象上,是不会加载到全局环境中。