一,node.js的组成
node.js是由ECMAScript及node环境提供的一些附加API组成的,包括文件,网络,路径等一些更加强大的API。
二,基础语法
所有的js语法在Node环境中都可以使用。
它需要命令行工具来运行js代码:
这样的话,就又需要掌握一些命令行的知识:
- 在文件夹处shift+右键—在此处打开Powershell窗口:就可以直接进入本目录下的命令行环境
- 文件名太长,只需要输入具备辨识度的前几个字符,按tab键,会自动补全文件路径
- clear清除
- 上键,可以重新输入之前的命令
- __dirname 保存着当前路径
- ctrl+c:终止操作
三,node.js模块化开发
这里先要讲讲js在使用时的两个弊端。文件依赖和命名冲突
第一点:js的文件有可能多次引用,例如,轮播图.js引用了scroll.js,scroll.js又引用了jQuery.js,而一旦缺少那个文件都运行不了。
第二点:js文件引用时,全局变量是可以互相访问的,一旦命名重复,就会被覆盖!
而node,js模块化开发,就有专门代码说明引用了谁,不需要再去分析引用了谁。模块化开发还体现在:类似于机械设计中的零部件开发设计一样,先把能够实现各个功能的模块设计出来,然后整合在一起就成为整机了。并且,取出其中的部分模块,不会影响到其他模块的功能。
Node.js规定一个js文件就是一个模块,模块内部定义的变量和函数在 默认情况下在外部是无法得到的。
模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块
想要导出,就把它设置为exports对象的属性,
想要导入,采用require方法,返回值是一个exports对象。(当然,参数是路径和node.js文件名)
四,系统模块
也就是node.js自身写好了一些常用的基本的模块,我们直接调用就可以使用。
一,文件读取模块
let fsObject=require('fs')
//引入node的fs模块,fsObject就是那个引入的对象,
// 它包含很多方法,其中就有读取文件的方法:readFile
fsObject.readFile('./text.txt', 'utf-8',(err,doc)=>{
//如果文件读取出错,err是一个对象,包含错误信息
//如果文件读取正确 ,err是null
//doc是问价读取的结果
console.log(err)
console.log(doc)
})
运行后,确实读取到txt文件的内容了。
二,文件的写入模块
let fsObject=require('fs')
///引入node的fs模块,fsObject就是那个引入的对象,
// 它包含很多方法,其中就有写入文件的方法:writeFile
fsObject.writeFile('./write.txt','即将写入的内容',err=>{
if (err!= null){
console.log(err);
return
}
//当文件写入失败时,err是个对象,里面保存错误信息
//当文件写入成功时,err是null
//当文件写入时,还没有这个文件,则会自动创建一个
console.log(err)
console.log('文件写入成功')
})
## 三,系统的path路径操作
事情的起因时不同的操作系统,路径的拼接符号不一样,windows是/都可以,linux是/才可以。
//假如我想读取这个路径下的文件:test1\test2\text.txt
let pathObject =require('path')
const path=pathObject.join('test1','test2','text.txt')
//取得拼接好的路径,它会自动检测是windows还是linux环境,然后返回对应的路径
let fsObject=require('fs')
fsObject.readFile(path, 'utf-8',(err,doc)=>{
console.log(err)
console.log(doc)
})
四,相对路径和绝对路径
比如这里写的就是相对路径,程序运行时,会把当前路径+相对路径做一次“运算”,以此来找到绝对的路径,然后运行程序。
也就是说,其实我们直接写绝对路径是最安全的,可以避免电脑找不到正确的路径。
在命令行中就有一个参数,里面 正好保存着当前的地址:__dirname (注意是两个下划线)
于是就可以利用path.join把这个当前路径和绝对路径合并起来得到文件的绝对路径了!!
//假如我想读取这个路径下的文件:test1\test2\text.txt
let pathObject =require('path')
let fsObject=require('fs')
const path=pathObject.join( __dirname ,'test1','test2','text.txt')
fsObject.readFile(path, 'utf-8',(err,doc)=>{
console.log(err)
console.log(doc)
})
五,node.js的第三方模块
第三方模块,就是别人写好,我们拿过来就可以直接使用的模块。又称作包。
- 以js文件的形式存在,提供实现项目具体功能的api接口。
- 以命令行工具的形式存在,以辅助项目开发。
那如何获取第三方模块呢?
有一个网站是第三方模块的存储和分发仓库:npmjs.com
这个网站提供了一个node的第三方模块管理工具:npm(node package manager)
当我们需要下载什么第三方模块时,我们只需要在命令行中输入:npm install 模块名称
默认情况下会下载到命令行的当前目录下面。
卸载第三方模块:npm uninstall 模块名称
这种方式是本地安装,也就是只有当前工作目录下的项目使用。
对于库文件,我们通常是采用本地安装,而对于命令行工具,则是采用全局安装,毕竟下回项目也要用不是?
六,命令行工具:nodemon的安装
nodemon是一个命令行工具,用来辅助项目开发。
没有它的时候,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。
而安装它之后,就会监听该文件的保存操作,一旦文件保存完成,就会重新执行该文件!
1,下载:npm install nodemon -g
加了-g,就是全局安装的意思。
2,在命令行中用nodemom替代node命令。
七,第三方模块 nrm
它可以访问国内的模块库,这样一来,安装第三方库的时间会大大缩短。
先下载安装nrm
- 使用npm install nrm -g来下载
- 查询可下载地址列表nrm ls
- 切换nrm下载地址nrm use 下载地址名称