这是我参与「第四届青训营 」笔记创作活动的第11天
今天是Node.js课程,这篇文章用来分享我的前端node.js笔记。
Node.js:运行环境--基于Chrome V8 引擎的
V8引擎负责解析和执行JavaScript代码
内置API使用运行环境提供的特殊接口,只能在所属的运行环境中使用;
浏览器是JavaScript的前端运行环境,Node.js 是JavaScript的后端运行环境;
Node.js中无法调用BOM,DOM等浏览器的API;
终端命令的使用
1.使用上箭头,可以快速定位到上一次执行的命令
2.使用tab键,能够快速补全路径(输入首字母或多个字母)
3.使用 esc键,能够快速清空当前已输入的命令
4.输入 cls命令,可以清空终端(clear)也行
文件系统模块
- 1.fs const fs=require("fs") 读取指定文件内容
fs.readFile(path[,options],callback)
path:表示文件的路径
options:可选参数,表示以什么编码格式来读取文件
callback:文件读取完成口,通过回调函数拿到读取的结果 - 2.fs.writeFile()用来向指定的文件中写入内容
fs.writeFile(file,data[,options],callback)
file:指定一个文件路径的字符串,表示文件的存放路径
data:表示要写入的文件内容
余下两个与fs.readFile()相同
path路径模块---用来解决路径问题;
路径问题 __dirname 代表当前文件所处的目录 要想使用path模块需要先导入 const path=require('path')
-
1.path.join()用来将多个路径片段拼接成一个完整的路径字符串
const pathStr=path.join('/a','/b/c','../','./d','e')
console.log(pathStr) //输出 \a\b\d\e
注意 '../'会抵消前面的一层路径 且只有'../'会 -
2.path.basename()方法,用来从路径字符串中,将文件名解析出来
path.basename(path[,ext])
path 表示一个路径的字符串
ext 表示文件扩展名 -
3.path.extname ()获取文件拓展名
模块化的基本概念和规范
- 1.规范:对代码进行模块化的拆分和组合时,需遵守的规则
- 2.分类:
- (1)内置模块---由官方提供:fs,path,http
- (2)自定义模块---用户创建的每个js文件
- (3)第三方模块---要下载的
- 3.加载模块
- (1)const fs=require('fs')
- (2) const custom=require('./custom.js')
- (3)const moment =require('moment')
使用require加载模块时会执行模块中的代码
module
使用require()方法导入模块时,结果永远以module.expotrs指向的对象为准。
exports对象:由于module.exports单词写起来比较复杂,为了简化向外
共享成员的代码,在默认情况下,exports和module.exports指向同一个对象。
最终共享的结果还是以module.exports指向的为准。
npm和包
第三方模块又叫做包
-
npm install(npm i)+包的完整名称----下载包 初次装包后,在项目文件夹多一个叫做node_modules的文件夹和 package-lcok.json的文件
- node_modules文件夹用来存放所有一安装到项目中的包。require()导入第三方包是就是从这个目录中查找并加载包
- package-lock.json配置文件用来记录node_modules目录下的每一个包的下载信息:名字版本号,下载地址;
程序员不要手动修改这两个文件中的任何代码,npm包管理工具会自动维护它们 安装指定版本的包可以通过@符号指定具体的版本
- npm i moment@2.22.2
包的语义化版本规划
第一位:大版本第二位:功能版本第三位:bug修复版本
大版本更新后面版本号清零
项目上传到GitHub时,要将node_modules添加到.gitignore文件夹,以免将其上传了
利用 npm init -y 快速创建一个package.json文件 上述的命令只能在英文的目录下成功运行!所以项目文件夹的名称一定要使用英文命名且不能出现空格。 npm install 命令安装包的时候,npm包管理工具会自动把包的名称和版本号,记录到package.json中
-
一次性安装所有的包(删除node_modules 文件后) npm install (npm i) npm包管理工具会先读取package.json中的dependencies节点 读取到记录的所有依赖包名称和版本号之后,npm包管理工具会把这些包一次性下载到项目中
-
卸载包 npm uninstall 包名称 执行此命令后会将package.json中dependencies的包记录删除
-
npm i 包名 -D(npm install 包名 --save-dev) 安装包到devdependencies节点 判断包应该安装到那个节点---下载时查看包的文档提示
包的分类:项目包,全局包
项目包--
1.开发依赖包(devDependencies,只在开发期间使用)
2.核心依赖包(开发和项目上线之后都会用到)
全局包:
i5ting_toc 是一个可以把md文档转成HTML页面的小工具,使用步骤如下 首先将其装为全局包 i5ting_toc -f 要转换的md文件路径 -o (-o表示自动在浏览器打开)
-
规范的包的结构
- 1.包必须以单独的目录而存在
- 2.包的顶级目录下要必须包含package.json这个包管理配置文件
- 3.package.json中必须包含name,version,main三个属性分别代表包的名字,版本号,包的入口
-
发布包 npm publish
-
删除包 npm unpublish 包名 --force 只能删除72小时的包,24小时不能重复发布
使用require()加载自定义模块时,必须指定以./或../开头的路径标识符。在加载自定义模块时, 如果没有指定这样的路径标识符,node会把它当作内置模块或第三方模块进行加载。
请求模块时,加载顺序如下:按确切文件名--补全js--补全json--补全node--加载失败,终端报错
第三方模块加载,如果没有找到对应的第三方模块,则会一层层向上搜索直到盘符根目录
目录当作模块标识符:
- 1.在被加载的目录下查找一个叫做package.json的文件,并寻找main属性,作为require加载的入口
- 2.如果目录里没有package.json文件,或者main入口不存在或无法解析,则Node.js会试图加载目录下的index.js文件
- 3.如果以上两步都失败了,则Node.js会在终端打印错误消息,报告模块的缺失:Error:Cannot find module 'xxx'