模块化开发
exports对象和module.exports对象的区别?
exports对象一般情况下是和module.exports对象等价,
但是当
exports对象和module.exports对象指向的不是同一个对象时,以module.exports为准。
系统模块fs文件操作
读取文件
//1.通过模块的名字fs对模块进行引用
const fs = require("fs");
const path = require("path");
//2.通过模块内部的readFile读取文件内容
fs.readFile(path.join(__dirname, "./module-a.js"), "utf8", (err, doc) => {
//如果文件读取出错err是一个对象,包含错误信息
//如果文件读取正确 err是null
//doc是文件读取结果
// console.log(err);
if (err == null) {
console.log(doc);
}
});
写入文件
const fs = require("fs");
fs.writeFile("./demo.txt", "写入内容", (err) => {
if (err != null) {
console.log(err);
return;
}
console.log("文件写入成功");
});
系统模块path操作
const path = require("path");
const finalPath = path.join("public", "static", "index");
console.log(finalPath);
相对路径and绝对路径
- 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前目录
- 在读取文件或者设置文件路径时都会选择相对路径
- 使用
__diename
获取当前文件所在的绝对路径
第三方模块nodemon
自动执行文件,查看文件保存变化,无需每次都重新执行该文件
使用步骤
- 使用
npm install nodemon -g
下载 - 在命令行工具中使用
nodemon
命令替代node命令执行文件
第三方模块nrm
npm下载地址切换工具,npm默认的下载地址在国外,国内下载速度慢
使用步骤
- 使用
npm install nrm -g
下载 - 查询可用下载地址
nrm ls
- 切换npm下载地址
nrm use
下载地址名称
第三方模块Gulp
基于node平台开发的前端构建工具
将机械化操作编写成任务,想要执行机械化操作时执行一个命令任务就能自动执行了
用机器代替手工,提高开发效率
用处:
- 项目上线,HTML、CSS、JS文件压缩合并
- 语法转换(es6、less…)
- 公共文件抽离
- 修改文件浏览器自动刷新
使用:
- 使用
npm install gulp
下载gulp库文件 - 在项目根目录下建立
gulpfile.js
文件 - 重构项目的文件夹结构
src
目录放置源代码文件dist
目录放置在构建后文件 - 在
gulpfile.js
文件中编写任务 - 在命令行工具中执行gulp任务
Gulp中提供的方法
- gulp.src():获取任务要处理的文件
- gulp.dest():输出文件
- gulp.task():建立gulp任务
- gulp.watch():监控文件的变化
const gulp = require("gulp");
//使用gulp.task建立任务
//1.任务的名称
//2.任务的回调函数
gulp.task("first", () => {
//1.使用gulp.src获取要处理的文件
gulp.src("./src/css/base.css")
//将处理后的文件输出到dist目录
.pipe(gulp.dest("./dist/css"));
});
执行:
- 安装
npm install gulp-cli -g
- 运行
gulp 任务名
Gulp插件
- gulp-htmlmin:html文件压缩
- gulp-csso:压缩css
- gulp-babel:JavaScript语法转化
- gulp-less:less语法转化
- gulp-uglify:压缩混淆JavaScript
- gulp-file-include:公共文件包含
- browsersync:浏览器实时同步
插件具体操作可参照文档
package.json文件
项目依赖
- 在项目的开发阶段和线上运营阶段,都需要依赖的第三方包,称为项目依赖
- 使用npm install包名命令下载的文件会默认被添加到package.json文件的dependencies字段中
{
"dependencies":{
"jquery":"^3.3.1"
}
}
开发依赖
- 在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方包,称为开发依赖
- 使用npm install 包名 --save-dev命令将包添加到package.json文件的devDependencies字段中
{
"devDependencies":{
"gulp":"^3.9.1"
}
}
使用npm install --production
安装项目运行依赖,下载的依赖不包括开发依赖,只有项目依赖
package-lock.json文件的作用
- 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题
- 加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作
Node.js中模块加载机制
模块查找规则-当模块拥有路径但没有后缀时
require('./find.js');
require('./find');
- require方法根据模块路径查找模块,如果是完整路径,直接引入模块
- 如果模块后缀省略,先找同名JS文件再找同名JS文件夹
- 如果找到了同名文件夹,找文件夹中的index.js
- 如果文件夹中没有index.js就会去找当前文件夹中的package.js文件中查找main选项中的入口文件
- 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到
模块查找规则-当模块没有路径且没有后缀时
require('find');
- Node.js会假设它是系统模块
- Node.js会去node_modules文件夹中
- 首先看是否有该名字的JS文件
- 再看是否有该名字的文件夹
- 如果是文件夹看里面是否有index.js
- 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件
- 否则找不到报错