nodejs的第二天学习笔记
一、 Shell:
1) 常用的shell
a) CMD:
window+r 打开面板中输入cmd 回车
特点:很多都是window下面的指令
b) powerShell:
特点:它能够兼容window 和 (Linux,uinx)下面的指令
Osx - uinx
c) git bash
特点:它能够兼容window和*inux(linux,uinx)下面的指令
2)常用的shell指令
a)cd:切换路径
(1)cd ./ 当前目录
(2)cd ../ 回到上级目录
(3)cd a 在当前目录下找到有a文件夹
注意点:(1)如果要改变盘符,在cmd中要先转换到对应的盘符上去,再进入文件夹;如果是powershell可以直接跨盘符。
(2)如果要改变盘符,在cmd中不用加上cd
b)dir/ls:查看当前目录所有文件和文件夹
(1)cmd中列出当前目录只能用dir
(2)powershell总列出目录既可以用dir又可以用ls
c)cls/clear:清屏
(1)cmd 中清屏只能用cls
(2)powershell中清屏既可以用clear,又可以用cls
d)tree 使当前目录下所有的文件结构(只包含文件夹)以树状显示出来
3)shell的气他作用:打开应用程序
步骤:
1. 在shell转到要打开应用程序所在的路径;
2. 在shell中输入 ‘.\’加上应用程序的名字
二、环境变量:
系统打开一个文件的时候会配置好的环境变量中的路径下面去寻找对应的程序(.exe)
2.1作用:
用于指定系统文件的默认打开路径,当在cmd/powershell/运行中打开文件时会,除了在当前目录下面去找对应的文件以外还有会环境变量对应的目录下面去文件。
2.2分类:
用户变量:只有当前登录的用户才能使用
系统变量:所有的用户都能使用到
三、node安装:
1) 使用nodejs的官网上下载的安装包来安装(一旦版本更新,需要重新安装,不推荐)
2) 使用nvm来安装nodejs
a) nvm仅仅只是一个nodejs的版本管理工具
b) 优点:可能同时管理多个nodejs版本,更新了新的nodejs只需要版本号就可以通过nvm来下载了
c) 安装步骤:
(1) 下载nvm工具,并安装(设置两个路径:一个是nvm存放的路径,另一个是nodejs存放额路径)
(2) 打开nvm,通过指令来安装node:
Nvm install nodejs的版本号 + 回车 可以下载对应版本的nodejs
3) nvm , nodejs , npm 之间的关系:
nvm :nodejs 的版本管理工具,可以下载nodejs以及改变正在使用的nodejs的版本
nodejs:提供node 环境,其中集成大量的核心模块
npm:每个版本的nodejs都自带的一个工具,他们以帮助nodejs去上传和下载新的第三方包
四、nvm的常用指令
1)nvm list
-查看当前已安装的所有nodejs版本
2)nvm install nodejs的版本号
-安装指定版本的nodejs
3)nvm uninstall nodejs的版本号
-卸载指定版本的nodejs
4)nvm use nodejs的版本号
-将指定的nodejs版本设定为当前使用的nodejs环境
注意问题:
a)如果直接安装nvm的话是没有nodejs版本的,所以一般安装完nvm以后要通过nvm指令再次安装需要的nodejs版本。
b)nvm安装nodejs其实就是从互联网上将nodejs对应的版本下载到nvm所在的目录下的文件夹下,当文件下载完成以后文件中的nodejs的小图标会变成nodejs的六边形图 标,如果不是,并且下载也停止了,说明下载失败,请卸载后重新下载。
c)版本下载完成之后需要通过nvm use 指令来使用对应的nodejs版本,使用版本的本质上将下载好的文件拷贝到安装nodejs的目录下面。
d)通过node -v可以查看使用的node的版本
e)如果用的是苹果的osx系统请使用tnvm(淘宝出的一款在苹果电脑上安装nodejs的版本工具)
五、什么是nodejs
1)定义:nodejs 是 JavaScript 除了浏览器之外可以运行的另一个环境(runtime)。可以为我们提供开启服务功能和提供文件读写功能
2)特点:
a) 基于google浏览器的v8引擎
b)事件驱动、非阻塞 I/O
c)因为第二个特点,nodejs相比其它的后台语言要高效、轻量。
d)开源并且跨平台
.net:闭源,只能在window系统下面运行
Java:开源,跨平台
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)
六、node的使用(nodejs运行有两种模式)
1)REPL:交互式运行环境(给开发人员的测试的模式)
在shell中直接输入node敲击回车,会进入REPL模式。可以在这个模式下自己写一些js代码来测试效果
REPL环境中的常用指令
=>ctrl+c 两次:退出REPL环境
=>ctrl+d 一次:退出REPL环境
=> .exit 退出REPL环境
=>↑↓:查看RPEL的历史操作记录
=> _: 得到上一次操作的结果
=>tab(tab键):查看nodejs中的API
=> .save fileName:以js文件的形式将当前REPL会话保存到硬盘中
=> .load fileName: 将硬盘中的js文件以REPL的形式读取出来
2) 正常开发模式(执行js文件)
使用步骤:
a) 写好一个js文件
b) 在js文件所在的位置打开powershell,输入指令node fileName.js 能得到js的执行结果
c) 也可以在sublime中安装terminal插件(ctrl+shift+p->package controll:installterminal )
d) 也可以在webstorm中
七、nodejs的常用API
1) global对象
(1)作用:全局对象。类似于javascript中的window对象
(2)什么是全局对象:在nodejs中,所有的js都有运行在node环境下,在这个环境中可以直接使用很多方法和属性,而管理这些方法和属性的对象就叫做全局对象
(3)golbal中的方法和属性:
1. global.setTimeout(function(){},time); //异步执行的方法
2. global.setImmeditate(function(){}); //异步执行的方法(优先级要高于setTimeout)
对比:process.nextTick(function(){}); //异步执行的另一个方法(优先级比上面两个都高)
总结:三个方法都是异步执行的代码,如果同时放在一起,nextTick优先级最高,setImmediate其次,setTimeout最低。常用的是setTimeout.
全局对象中的方法在任何js文件中都可以直接使用,不需要通过require方法再单独导包。而其它非全局对象中的方法如果要使用的话需要导包(如:要使用http中的方法 需要require('http'))
/**
* 虽然每个nodejs中的文件都可以用到这个方法,但是它不属于全局方法(为全局对象)
* nextTick 在三个方法中的执行优先级是最高的
* setTimeout 在三个方法中是第二个执行的
* setImmediate最后执行
*/
//异步执行方法
process.nextTick(function(){
console.log('this is nextTick');
})
//异步执行方法
setImmediate(function(){
console.log('this is setImmediate');
})
//异步执行方法
setTimeout(function(){
console.log('this is setTimeout');
},)
3. __dirName:得到当前文件所在的路径(这个属性虽然是列在全局对象,但是它得到的却是具体某个js文件中的路径,也就是说每个文件都有一个。每个文件中都有的对象我们把他叫做伪全局对象)
var a = __dirname; console.log(a); //__dirname:输出当前文件的绝对路径
对比:process.cwd:得到当前文件的执行路径:执行路径与文件所在路径不一样
4. __fileName: 得到当前文件的全路径(物理路径+文件名),它与__dirName一样,也是一个伪全局对象。
console.log(__filename); //__fliename :得到当前文件所有的物理路径 + 文件名
5. process对象:
(1)process.abort()//立即结束js代码的运行,下面的代码不再执行
console.log('这是一个很寂寞的天,下着有些伤心的雨+1');
console.log('这是一个很寂寞的天,下着有些伤心的雨+2');
process.abort(); //当程序执行到这个方法的时候,直接结束程序
console.log('这是一个很寂寞的天,下着有些伤心的雨+3');
(2)process.arch() //得到当前运行环境所在平台
console.log(process.arch); // process.arch 得到当前系统的位数
porcess.argv() //得到当前文件的执行参数
返回值为一个数组,数组中的第一个值,第二个值为默认值,分别为当前repl环境的执行进程,以及当前node执行的js文件的绝对路径(__fileName)
如果将来执行js文件的时候手动传入了参数,那么这些参数会按顺序被添加到argv的数组中。
应用:写一个命令行版的小型计算器
(3)process.env //得到当前操作系统中环境变量
//console.log(process.env); console.log(process.env.path); //process.env : 作用是输出当前系统的环境变量
应用:用于区别生产环境和正式环境(通过执行时传入set 变量值=变量名 && node 运行程序来执行。注意:powershell中不认识&&指令,必须要去cmd中执行)
(4)process.stdout.write() //输出内容
process.stdout.write('this is stdout.write');
process.stdout.write('this is stdout.write\n');
process.stdout.write('this is stdout.write\n');
console.log('today is a good day');
console.log('today is a good day');
//process.stdout.write : 作用输出一段内容,但是没有换行
//注意:其它console.log()这个方法就是用porcess.stdout.write来实现,只不过在后面加了一个换行 (\n)
console.log的底层其实就是通过这个方法来输出的。
process.stdout.write输出的只能是字符串,并且不带换行
应用:使用这个方法完成命令行的小动画
(5)process.stdin //监控输入的对象
process.stdin.on('readable',function(){
//注意点:第一次进来的时候由于用户还没有来得及输出内容所以content为 null
// 第二次进来,用户输入了内容“bingo”,但是输出的content是一个<Buffer 62 69 6e 67 6f 0d 0a>
var content = process.stdin.read();
console.log(content);
//console.log('here i am');
})
//process.stdin.on('readable') 监控用户是否键入了内容
//process.stdin.read() 得到用户输入的内容
process.stdin.on('readable',function(){})//当输入内容敲击回车时会触发这个事件中的回调函数
process.stdin.read();
得到在输入回车前输入的内容(如果直接输出会以buffer数组的形式输出,toString以后才会转为字符串)
2) root对象
这个对象与global对象是一样的都是一个全局函数(可以理解为root是global的别名)
注意点:在REPL环境中定义的所有的变量都会加载到全局对象中,在单个js文件的中定义的变量,只要不是定义在全局对象上,是不会加载到全局环境中。
nodejs的第二天学习笔记的更多相关文章
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- 《Linux内核分析》第二周学习笔记
<Linux内核分析>第二周学习笔记 操作系统是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- AS开发实战第二章学习笔记——其他
第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...
- #Spring实战第二章学习笔记————装配Bean
Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...
- Nodejs --我自己的学习笔记
对于Nodejs,相信客官并不陌生,网上却已众说纷纭,有人说是一个平台,有人说是服务器JavaScript,有人说一个框架… 之前亦有过研究,多怀可远观而不可亵玩也.高效率,I/O操作,异步编程,以及 ...
- Python核心编程第三版第二章学习笔记
第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...
- 20165326 java第二周学习笔记
学习笔记 一.理论学习 基本数据类型与数组 标识符的第一个字符不能是数字:标识符不能为关键字. 基本数据类型多数与c语言相同.重点如下: 1.逻辑类型boolean赋值true/false 2.浮点数 ...
随机推荐
- Ubuntu 14.04 升级gcc 4.8到gcc 5.x
简介 有些软件比较新,需要更高的gcc版本,所以需要升级gcc.编译安装比较耗时,所以直接选择bin包就好. 步骤 添加源 sudo add-apt-repository ppa:ubuntu-too ...
- *BigDecimal初识
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处 理16位有效数.在实际应用中,需要对更大或者更小的数进 ...
- ios - GCD简单小结
首先GCD两个名词: 队列 同步异步. 队列: 任务放到队列,队列中的任务执行方式取决于执行队列中任务的方式---同步异步. 串行队列: 任务顺序执行,可以叫阻塞队列.只有前面任务完成才执行后面的. ...
- Saving changes is not permitted in SQL Server
From Save (Not Permitted) Dialog Box on MSDN : The Save (Not Permitted) dialog box warns you that sa ...
- Python 模块,数据类型,元组
模块 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的. s ...
- Ubuntu 16.04 802.1x 有线连接
Ubuntu下使用MentoHUST搞定 锐捷校园网认证网络 http://www.linuxidc.com/Linux/2013-10/91157.htm
- 在C#中??和?分别是什么意思?
在C# 6.0中,引入了一个 ?. 的运算符,前面的代码可以改成如下形式: int? firstX = points?.FirstOrDefault()?.X; 从这个例子中我们也可以看出它的基本用法 ...
- [attribute] 匹配包含给定属性的元素
描述: 查找所有含有 id 属性的 div 元素 HTML 代码: <div> <p>Hello!</p> </div> <div id=&quo ...
- Eclipse建立Maven项目后无法建立src/main/java资源文件夹
在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE System Library,选择workspace default jre就可以了.
- gfortran编译Fortran数组问题
可能是IVF(inter visual fortran)比LF(lahey Fortran)编译器比较严格的原因 real :: A(L,M) = (/ 1,2,3,4,5,6,7,8,9,10,11 ...