node
-
node 属于后端开发,node 很牛x,作为前端开发人员,node 是进入后端开发的最快途径
-
node 不是一门语言,它是一个 JS 运行环境而已,类似浏览器一样
-
官网:https://nodejs.org/en
-
我们一般下载LTS版本,也就是最新稳定版,这里注意下载与自己电脑匹配的安装文件,window的x86是32位系统,x64才是64为系统
-
我们安装目录千万不要有中文,如果路径中包含中文,后续可能会有奇奇怪怪的问题
-
安装完后,打开命令行窗口,windows用户打开cmd或powershell,输入
node -v
命令验证是否安装成功,如果输出版本号即为成功 -
常见安装错误:
- 2502、2503报错,原因是账户权限不足:
- 以管理员身份打开命令行窗口(cmd、powershell)
- 执行
msiexec /package node安装包的位置
- 直接右击安装程序,在弹出的菜单中选择以管理员的身份运行(优先用这个)
- 安装时没报错,执行命令报错:
- 需要手动把node的安装目录添加到path环境变量中(添加完后,一定要重新打开命令行窗口)
- 2502、2503报错,原因是账户权限不足:
-
path环境变量的作用:就是存储系统中的目录,当在命令行执行命令的时候,系统就会到这些目录中去查找可执行文件,如果找不到就会报错,如果找到了,就执行
-
我们知道JS由ECMAScript、DOM、BOM组成,ECMAScript是JS基础语法,而DOM和BOM是为了可以让JS这门语言控制浏览器附加的一些API,Node也是有ECMAScript以及一些附加的API组成的,所以所有的ECMASCript语法都能在Node中使用
-
命令行常用命令:
- cd:切换目录
- cd …/:切换至上一级目录
- cd 目录名:切换至目标目录
- node 文件名:用node执行js的命令,可以只写文件名前缀,按tab键自动补全
- clear:清屏
- 每次执行的命令都会有记录,可以通过上下方向键快速的选择历史命令
- cd:切换目录
-
在node中没有DOM和BOM,所以就不会有window
-
浏览器中的全局对象是window,而node中的全局对象时global
-
注意:node中的global对象也有如下方法(他们不是window的,只不过名字一样而已):
- console.log()
- setTimeout()
- clearTimeout()
- setInterval()
- clearInterval()
其实node并没有想象的那么难,只不过换个地方写js代码而已。
模块化开发:
- JS的两大问题:
- 依赖关系
- 命令冲突
- 模块化开发就可以解决上述的问题,它是软件的一种开发方式,一个功能就是一个模块,多个模块可以组成一个完整的应用,移除或添加一个模块不会影响其他模块的运行
- node中一个js文件就是一个模块,拥有独立的作用域,默认情况下,模块内部定义的变量和函数在外部无法得到
- 我们可以使用exports对象导出数据,使用require方法导入模块内部暴露出来的数据
- 导入的时候,模块的后缀名可以省略,但是建议加上,因为我们的代码写的越清晰可读性就越好
- 我们还可以使用module.exports对象来导出,exports实际上就是module.exports的引用,类似
exports = module.export
- 注意:当exports和module.exports指向的不是同一个对象时,导出的结果以module.exports为准
系统模块:
-
node的API几乎都是以模块化的方式提供的,所以我们称之为系统模块,这些模块在导入的时候只用写模块名就可以了
-
与文件操作相关的系统模块叫fs(file system):
-
导入fs模块:
const fs = require('fs')
-
读取文件内容的范例:
const fs = require('fs') fs.readFile('./index.js'/* 文件路径 */, 'utf-8'/* 字符编码(可选参数) */, function (err, content) { if (err) { console.log(err) return } console.log(content) }/* 读取完成后的回调函数 */)
补充说明:node中的API回调函数基本上第一个参数都是错误信息err,我们通常称之为错误优先的回调函数,如果有错, err的值为包含了错误信息的对象,如果没错,err的值则为null
-
写入文件范例:
const fs = require('fs') const content = '将要写入到文件的内容' fs.writeFile('./index.html', content, err => { if (err) { console.log(err) return } console.log('文件写入成功') })
补充说明:如果文件不存在,会自动创建,如果文件已存在,那么会覆盖
-
-
系统模块path
- 由于不同的操作系统路径分隔符不一致,path模块就可以帮我们解决这个问题,它可以自动识别当前的操作系统,帮我们处理
- windows:\ / 都可以
- mac:/
- linux:/
- 路径拼接语法:
path.join('路径1', '路径2', ...)
- 由于不同的操作系统路径分隔符不一致,path模块就可以帮我们解决这个问题,它可以自动识别当前的操作系统,帮我们处理
相对路径&绝对路径:
- 一般情况下我们都使用绝对路径,除非相对路径是相对于当前文件的(比如require方法),但是大多数情况下使用相对路径都是相对于当前命令行所在工作目录的,而我们命令行中的工作目录是可变的,所以在这种情况下我们就需要使用绝对路径了
- 可以用__dirname来获取当前文件所在目录的绝对路径,注意:__dirname这里不包含文件名,只到目录这一级
- require方法是可以写相对路径的,因为它是相对于当前文件的:
const a = require('../hehe/aaa/a.js')
,并且require方法内部是使用了path系统模块处理了路径的
第三方模块:
- 不是自己定义的并且不是node的系统模块,就是第三方模块,一般是由别人(个人或组织)已经写好的,具有特定功能的模块,也称为第三方包
- 一般有两种形式:
- 库文件:提供API(Application Program Interface)
- 命令行:辅助项目开发,安装完后都会提供一个可执行的命令给我们
- 在安装node的时候有一个自动安装的第三方模块npm(node package manager),它是node的包管理模块,以命令行形式的模块存在
- 安装第三方模块(本地安装):npm install 模块名,缩写形式:npm i 模块名
- 全局安装:npm i -g 模块名
- 卸载第三方模块(本地卸载):npm uninstall 模块名,缩写形式:npm un 模块名
- 全局卸载:npm un -g 模块名
- 安装第三方模块(本地安装):npm install 模块名,缩写形式:npm i 模块名
- 一般库文件形式的模块,我们用本地(局部)安装(会安装到你当前命令行所在目录下的node_modules文件夹中),命令行形式的模块,我们用全局安装(电脑node的安装目录的node_modules文件夹)
nrm第三方模块的使用:
- nrm是一个可以切换npm下载地址的第三方命令行形式的模块,npm默认的下载地址是在国外,所以我们在国内下载比较慢,可以用nrm将npm切换至国内下载地址,这样就会快些
- 使用步骤:
- 安装:npm i -g nrm
- 查询可用下载地址列表:nrm ls,注意,前面有个*号的表示当前的下载地址
- 切换:nrm use taobao