目录
Node 开发
概述
Node 属于服务器端开发,使用 JS 语法开发后端应用;
生态系统活跃,有大量开源库可调用;
前端开发工具大多基于 Node 开发。
Node 是一个基于 Chrom V8 引擎的 JS 代码运行环境;
JS 是由 ECMAScript、DOM、BOM 三部分组成的,而 Node.js 是由 ECMAScript 和 Node 环境提供的一些附加 API 组成的,包括文件、网络、路径等。
Node.js 基础使用
所有 ECMAScript 语法在 Node 环境中都可以使用;
- 创建 .js 文件,
- 用命令行工具进入到 js 文件的目录,然后 “node 文件名” 命令执行文件。
P43 3.3
Node.js 全局对象global
类似于浏览器中的全局对象是 window,且 Node 的全局对象 global 也有类似的方法:
console.log、setTimeout、setInterval() 等,前面也是省略了 global.
Node.js 模块化开发
10132851
JS 两大问题:
- 文件之间依赖关系不明确
- 命名冲突会导致代码覆盖
Node.js 模块化开发可以解决这些问题。
1、模块化规则
认为 JS 文件就是一个模块,模块内部定义的变量和函数在外部无法得到;
可以在模块内部使用 exports 对象导出自身的成员: exports.导出名 = 内部成员名
还可以用 module.exports...
两种导出方式的关系:
exports 是 module.exports 的别名,都是地址引用;
同时用 exports 和 module.exports.属性名 = 属性值 来导出对象的属性时,是导出的同一个对象;
但是当 exports 和 module.exports 指向的不是同一个对象时,导入模块的文件所接收的对象是以 module.exports 为准。
使用 require 方法导入其他模块,接收到的是一个对象: 自定义一个名词来接收 = require('导入文件名')
其中文件名的后缀 .js 可省略不写。
2、系统模块
10132854
是指 Node 运行环境提供的 API。
在一个模块中可以直接导入。
fs 文件操作模块
(file system)
导入文件操作模块: const fs = require('fs')
读取文件操作:
fs.readFile('文件路径/名称', '文件编码', (err, doc) => { // callback回调函数
// 如果文件读取出错,err返回一个包含错误信息的对象,如果没错 err就是null
// doc 返回文件读取的结果
if (err == null) {
console.log(doc);
} else {
console.log(err);
}
});
写入文件内容操作:
fs.writeFile('写入的文件路径/名称', '写入的数据', err => { // callback回调函数
if (err == null) {
console.log('文件写入成功');
} else {
console.log(err);
return;
}
});
如果写入的文件原本是不存在的,这个操作就会先创建文件。
path 路径操作模块
路径拼接操作:
因为在不同系统,路径分隔符不一样;
同上,先用 require 引入模块,然后拼接,得到一个适合系统的完整路径;
path.join('路径1', '路径2', '路径3'... )
__dirname(两个下划线) 获取当前文件所在目录的绝对路径;
所以可以用 path.join('__dirname', '文件名') 得到当前文件的绝对路径。
- 在执行文件时,文件中的相对路径有时使用的是相对于命令行工具当前工作目录的路径,会造成错误;
- 所以大多数情况下,读取文件、设置文件路径都使用绝对路径。
- 但 require 方法中可以使用相对路径,因为它就是相对于当前文件的路径。
3、第三方模块
10132858
通常由多个文件组成并放在一个文件夹中,所以第三方模块又称为包;
存在形式:JS文件(库) 或 命令行工具
npmjs.com:第三方模块的存储和分发仓库;
npm(node package manager):node的第三方模块管理工具,已集成在 Node.js 中;
在命令行工具中:
- 下载第三方模块:npm install 模块名称 —— 本地安装
- 卸载第三方模块:npmuninstall package 模块名称
一般对库文件是本地安装,对命令行工具要全局安装。
第三方模块 nodemon、nrm、gulp
nodemon:是一个辅助项目开发的命令行工具,保存文件后自动执行。
nrm:切换 npm 的下载地址,将国外地址切换到国内。
gulp:基于 node 平台开发的前端构造工具,将机械化的操作编写成命令行任务,让它自动执行;
功能如 HTML\CSS\JS 文件压缩合并、ES6\less 语法转换、公共文件抽离、修改文件后浏览器自动刷新等。
Gulp 的使用
P15-20
gulp 准备、执行步骤:
- nmp install gulp 安装gulp库;
- 在任务根目录下建立 gulpfile.js 文件;
- 在任务根目录下建立 src目录(放置源代码文件) 和 list目录(放置处理后的文件);
- 在 gulpfile.js 文件中编写任务;
- 用 gulp 命令行工具,执行 JS 文件中 gulp.task 创建的任务,执行时直接 gulp + 任务名。
Gulp 提供的方法:
- gulp.src(文件路径):获取要处理的文件;
- gulp.dest(输出路径):输出处理后的文件;
- gulp.task('任务名称', 箭头回调函数):建立 gulp 任务;
- gulp.watch():监控文件的变化。
Gulp 其他很多功能的实现是通过插件实现的,插件有:
gulp-htmlmin(压缩html文件)、gulp-csso(压缩css文件)、gulp-babel(JS语法转换 es6=>es5)、gulp-less(less=>css语法转换)等等。
gulp 插件的使用步骤:
- npm 下载插件;
- 在 gulpfile.js 文件中引入插件;
- 调用插件。
package.json 文件
项目描述文件,里面记录了当前项目信息,如项目名称、版本、作者、依赖的第三方模块等等
npm 提供的功能,使用 npm init -y 生成 package.json 文件。
两种依赖关系
项目依赖:在项目开发和线上运营阶段,都需要依赖的第三方模块;
通过 npm install 下载的,并添加在 package.json 文件中的 dependencies 字段中。
开发依赖:只在项目开发阶段需要依赖的第三方模块;
通过 npm install 模块名 --save-dev 下载的,并添加在 package.json 文件中的 devDependencies 字段中。
package-lock.json 文件
记录模块之间的依赖关系;
锁定包的版本、加快包的下载速度。
4、模块的加载机制
10132887
模块查找规则
当 require('模块名') 中的模块名是完整路径时,就正常导入模板;
当它只是一个路径,没有后缀时,或者当它没有路径也没有后缀,只是一个单词时,则按如下的流程来查找模块:
12.2