node
1. fs模块
1.1 文件读取
fs.readFile(path[, options], callback)
- path 读取的文件路径
- options 可选的参数,默认为null,其实得到的是 buff
- callback 回调函数
- err 错误对象
- data 读取的数据
const fs = require('fs')
fs.readFile('./files/1.txt', 'utf8', (err, data) => {
if (err) return console.log(err.message)
// console.log(data.toString())
// console.log(data + '')
console.log(data)
})
1.2 文件写入和追加
fs.writeFile(file, data[, options], callback) fs.appendFile(file, data[, options], callback)
- file 写入文件路径
- data 写入的数据
- options 可选的参数,默认为utf8
- callback 回调函数
- err 错误对象
const fs = require('fs')
// fs.writeFile('./files/1.txt', '复方草珊瑚', 'utf8', (err) => {
// if (err) return console.log(err.message)
// console.log('success')
// })
fs.appendFile('./files/1.txt', '复方草珊瑚', 'utf8', (err) => {
if (err) return console.log(err.message)
console.log('success')
})
1.3 文件拷贝
fs.copyFile(src, dest[, mode], callback)
- src 拷贝的文件路径
- src 拷贝后的文件路径
- mode 可选参数
- callback
- err 错误对象
const fs = require('fs')
// 传统写法
// fs.readFile('./files/1.txt', 'utf8', (err, data) => {
// if (err) return console.log(err.message)
// // console.log(data)
// fs.writeFile('./files/1-copy.txt', data, err => {
// if (err) return console.log(err.message)
// console.log('success')
// })
// })
// 新版的写法 node必须是 8.5.0+
fs.copyFile('./files/1.txt', './files/1-copy.txt', err => {
if (err) return console.log(err.message)
console.log('success')
})
2. path 模块
path.join(__dirname,'./file/1.txt')
3. 模块化
什么是模块化
每一个js文件就是一个一个模块,在一个js文件中引入另一个js文件就是模块化
模块化的方案 (了解)
- 前端方案
-
AMD require.js
-
CMD sea.js
- 后端处理方案
- commonjs
- es的模块化
commonjs的规范 (掌握)
-
global 一般用于定义一些全局的属性,但是多次定义重复的数据会被覆盖
-
暴露 exports module.exports
-
引入 require
-
标识符 module
-
commonjs 中module.exports 和 exports 的区别
-
module.exports.a === exports.a
-
module.exports = {b:2} exports.a=1
以module.exports 为准不再设置 a 的值,所有建议以后大家暴露的时候使用 module.exports
-
4. 面试七连击 核心
- 什么是回调函数
在一个函数中当另一个函数当做参数使用,调用的同时可以传递内容的数据
所谓的回调函数就是参数的调用
- 回调函数的使用场景
需要延迟获取结果值的时候
- 回调函数有什么缺陷
多层嵌套的时候产生回调地狱
- 如果解决回调函数的缺陷
es6的Promise
- Promise的特性
Promise 是一个构造函数,也是一个对象
Promise 的原型上有一个then函数 resolve reject
- Promise有什么缺点
- promise一旦新建就会立即执行,无法中途取消
- 当处于pending状态时,无法得知当前处于哪一个状态,是刚刚开始还是刚刚结束
- 如果不设置回调函数,promise内部的错误就无法反映到外部
- promise封装ajax时,由于promise是异步任务,发送请求的三步会被延后到整个脚本同步代码执行完,并且将响应回调函数延迟到现有队列的最后,如果大量使用会大大降低了请求效率。
- 如何解决Promise的缺点
const fs = require('fs')
const path = require('path')
function getFileData(url) {
return new Promise((res, rej) => {
fs.readFile(path.join(__dirname, url), 'utf8', (err, data) => {
if (err) return rej(err)
res(data)
})
})
}
async function getData() {
const data1 = await getFileData('../txt/1.txt')
const data2 = await getFileData('../txt/2.txt')
const data3 = await getFileData('../txt/3.txt')
console.log(data1,data2,data3);
}
getData()
5. 包管理工具
npm
- 设置淘宝镜像
# 方式1 直接配置
npm config set registry https://registry.npm.taobao.org
# 方式2 使用nrm管理镜像
npm i nrm -g
nrm --version
nrm ls | list
nrm use taobao
- 查看镜像
npm config get registry
- 常用命令
npm i 包的名称 -g|--save(-S)|--save-dev(-D)
npm uninstall 包的名称 -g|--save(-S)|--save-dev(-D)
npm init -y 生成package.json
npm i 根据package.json 记录的包重新下载
cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
yarn
- 安装yarn
npm i yarn -g
- 常用命令
yarn --version
yarn add 包的名称 -g|--save(-S)|--save-dev(-D)
yarn remove 包的名称 -g|--save(-S)|--save-dev(-D)
yarn init -y 生成package.json
yarn 根据package.json 记录的包重新下载
node-sass 包单独配置镜像
npm config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g
yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g
6. 包
包一些模块整合在一起, 还有一些依赖的资源
包的规范
-
package.json
- name 包的名称
- version 包的版本
- main 入口文件路径
-
dest | dist 给外部提供的资源
-
src | lib 存放源码
-
test 测试文件
-
readme.md 包的说明文档
包的使用
系统模块包
const fs = require('fs)
自定义包
const calc = require('./calc')
第三方包
const jquery = require('jquery')
包的调用规则
自定义包 --> 相对路径 --> package.json --> main --> src/index.js --> ...
第三方包 --> node_modules --> 包名称 --> package.json --> main --> src/index.js --> ...
快捷删包
npm i rimraf -g
rimraf node_modules