Node.js 定义
Node.js 是基于V8引擎的一个让js运行在福区段的运行环境 可以理解为一个虚拟机 在服务器上安装后jiu 可以在服务器上用js开发服务端程序 前后端通过 http 协议通信传递数据;客户端通过 http 协议发送请求,服务端接收客户端的请求,然后把资源通过 http 响应给客户端
Node 的优势
- 单线程异步 事件驱动
- 事件驱动的非阻塞I/O操作 轻量高效
- npm 包管理器 全球最大的开源node生态系统
- npm 是伴随着node一起安装的 安装完node npm 也就安装成功了
- npm包是别人做好的库或者工具 我们只需要安装和导入就可以使用(yarn 也是新兴包管理器)
node中的模块 在node中 每个JS都是一个模块 所有的逻辑和方法 都应该写在模块内
- 内置的核心模块 安装node时 node的内置内置模块一并安装了 如 http fs等
- 自定义模块 自己写的模块 -第三方模块 通过npm 安装的模块
自定义模块
function fn(){
console.log(1);
}
fn();
module.exports.fn = fn;
模块的导出
- module.exports = fn;
- expoerts.fn = fn;
- module.exports.fn = fn; 和2等效
模块原理 node自带模块化 node会在js文件外面套一个自执行函数
(function (exports, module, require, __dirname__, filename) {
// console.log(exports); // 导出
// console.log(module); // 模块
// console.log(require); // 导入
// console.log(__dirname); // 路径,绝对路径
// console.log(__filename); // 文件名,带绝对路径和拓展名
})(exports, module, require, __dirname__, filename);
模块导入 require()
let test = requoire('./1.test')
//js运行在浏览器端 浏览器会提供全局对象window node中有global 没有window
- 若模块中使用 module.exports = fn 或 exports.fn = fn 导出 在其他模块导入时 导入后就是fn
test()
- exports.fn= fn 导入将会得到一个对象 需要通过对象.属性名访问方法才能调用
console.log(test);{fn:[Function]}
test.fn()
模块导入时的注意事项
- 导入内置模块和第三方模块时可以不写路径
- 导入自己写的模块时要写路径
- 在 node 中导入模块可以省略 .js 和 .json;
导出
//逐个导出
module.exports.sum = sum;
module.exports,mins = mins;
//把module.exports指向一个新的对象
module.exports = {
sum,
mins
}
导入 配合结构赋值使用
let s = require('./1.test')
let {sum,mins} = s;
let total = sum(1,2,3)
第三方模块(依赖包)
- 初始化配置文件,通过 npm 生成一个 package.json;这个 package.json 是用来记录当前项目所需要的依赖(框架、类库、脚手架等)
npm init -y
路径文件不要有中文 2. -dependencies 生产依赖
- -devDependencies 开发依赖
- npm install 依赖包名称
- 无 会把依赖包下载到 node_modules 中,会添加到 devpendencies 中;
- -g 全局安装,把依赖包或者工具像程序一样安装在系统中,并且添加到环境变量,并且声成一个命令,这个命令在哪里都能运行;
- -save 会把依赖包下载到 node_modules 中,并且在 package.json 中的 dependencies 中添加信息;
- -save-dev 安装依赖包到 node_modules 中,并且会在 package.json 的 devDependencies 添加该依赖的信息;
内置的fs(file system 文件系统)模块 文件读写模块 用于读写文件
- 异步读取文件
fs.readFile(fileName, option, callback)
//fileName 文件名
// option: 以哪一种编码返回内容,默认的 buffer 类型的值,buffer 中存储的是二进制数据;所以一般设置为 utf8
callback 读取文件后执行的回调
fs.readFile('./text.txt', 'utf8', function (err, data) {
err // 读取失败的错误信息
data // 从文件中读取来的数据
console.log(data)
});
- 读取同步文件
fs.readFileSync(fileName, options);
//fileName: 文件名
//options: 编码
//该方法会返回同步读取到的内容
- 文件修改(向文件中写)
- 异步写入
fs.writeFile(path, data, option, callback) //path 文件名(如果没有就创建一个文件) //data 写入文件的数据 //option 文件编码 //callback 写入后执行的回调
fs.writeFile('1.js', 'console.log(`hello world`);','utf8', function (err, data) { if (err) { console.log(err); } else { console.log('写入成功') } });
- 同步写入
``` fs.writeFileSync(path, data, option) ``` **以上写入都是覆盖的写入,把文件中原有的内容覆盖掉**
- 向文件中追加内容
- 异步追加
fs.appendFile(path, data, option, callback);
- 同步追加
fs.appendFileSync(path, data, option);