Node.js简介
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。
网址:
什么是Node.js?
Node.js是一个JavaScript运行环境。实际上它是对Google V8引擎进行了封装。V8引擎执行JavaScript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行更好。
Node.js是一个基于Chrome JavaScript运行时建立的平台,用于方便地搭建响应速度快、易于扩展的网络应用。Node.js使用事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
Node.js的特点:
- 单线程
- 非阻塞I/O
- V8虚拟机
- 事件驱动
Node.js的模块
- 模块化规范:
- AMD——前端的异步加载模块规范,(
依赖前置
: 指的是在定义模块时,就将所依赖的模块标明) - CMD——前端的异步加载同步书写模块规范,(
依赖就近
: 指的是在定义模块时,用到哪个模块,才引入哪个模块) - CommonJS——后端的同步加载模块
- AMD——前端的异步加载模块规范,(
注意:
- 在node中使用ECMAScript编码,没有DOM和BOM
- 浏览器中的JS没有文件操作能力,但是node中的JS是有文件操作能力的
- 浏览器是不认识node代码的
Node.js中的模块分类
- 一种是内置模块/核心模块
- HTTP模块——用于搭建服务器
例如:Hello World案例
// 引入http模块
var http = require('http');
// 搭建服务器
server = http.createServer(function(req, res){
res.setHeader("content-type","text/plain;charset=utf-8");
res.end("Hello World");
});
// 端口监听
server.listen(3000, "127.0.0.1");
- FS模块——用于操作文件和文件夹
// 引入fs模块
var fs = require('fs');
+ 追加\创建文件
+ fs.appendFile(target, content, callback) 异步创建文件
+ fs.appendFileSync(target, content) 同步创建文件
+ 写文件
+ fs.writeFile(target, content, callback) 异步写入数据到文件
+ fs.writeFileSync(target, content) 同步写入数据到文件
+ 删除文件
+ fs.unlink(target, callback) 异步删除文件
+ fs.unlinkSync(target) 同步删除文件
+ 创建文件夹
+ fs.mkdir(target, callback) 异步创建文件夹
+ fs.mkdirSync(target) 同步创建文件夹
+ 删除文件夹(只能删除空的)
+ fs.rmdir(target, callback) 异步方法
+ fs.rmdirSync(target) 同步方法
+ 读取文件
+ fs.readFile(target, callback) 异步读取
+ fs.readFileSync(target) 同步读取
+ 读取文件夹
+ fs.readdir(target, callback) 异步读取
+ fs.readdirSync(target) 同步读取
+ 判定目标状态
+ fs.stat(target, callback) 异步判定
+ fs.statSync(target) 同步判定
- 一种是第三方模块:别人写好的模块,自己写的模块都属于第三方模块
NodeJS模块化相关
定义模块
- 在NodeJS中,一个JS文件默认就是一个模块
- 注意:JS文件不要使用node.js命名,除了
node
这个名字,可以使用其他任意名字来命名,当然最好不要使用中文名。
暴露接口方式
- exports
- 只能通过点语法或者方括号语法进行内容的暴露
- 不可以使用等号暴露内容
- module.exports
- 可以通过module.exports点语法或者方括号语法向外暴露内容
- 可以通过等号暴露内容
- 一旦使用module.exports = xxx 之后,exports将会失效
引入模块
- require
- 引入的内容取决于目标模块暴露的内容
- 参数可以是直接的内部核心模块名称
- 可以是
./
开头的相对路径
node_modules文件夹
该文件夹就是普通文件夹,但是nodejs赋予了特殊的意义: 只要你的名字是 node_modules ,不论是如何创建出来,就是一个node的模块"聚集地"。
特殊之处:只要一个第三方模块放在了该文件夹下,就可以不通过./
这种相对路径写法,直接写文件名就能找得到,而且不论层级(但一定要在同级或上级)
引入第三方模块的查找规则:
1、查找同级别中是否存在node_modules文件夹,如果有就进去查看是否有express模块
1.1、如果有,就引用
1.2、如果没有,继续向上一层文件夹中去找node_modules文件夹,如果有就进去查看是否有espress模块,如果有就引用,如果没有就继续往上查找,直到找到,如果到盘符根目录还没有,就报错 connot find module “express”
## NPM(node package management) NPM是一个NodeJS的模块管理器,随着Node安装到我们的系统中。可以在任意的命令行目录下调用它。它可以上传、下载、查询模块等。
-
下载命令
- npm install moduleName——安装moduleName这个模块到本地
- npm i moduleName——安装moduleName这个模块到本地,是第一种的简写方式
- npm i moduleName -g——安装moduleName这个模块到
全局
-
初始化
- npm init——生成一个
package.json
文件 该文件的作用是描述你的模块的相关信息的
- npm init——生成一个
-
清除缓存
- npm cache clean --force
package.json(该文件十分十分十分十分地重要)
这是一个用于记录当前项目(模块)信息的文件
- name 模块名/项目名
- version 版本号
- description 信息描述
- author 作者信息
- contributors 贡献者们
- dependencies 生产依赖
- devDependencies 开发依赖
- repository 仓库地址
- main 程序入口文件
- keywords 关键字
- scripts 脚本编辑 我们可以利用它来简化命令
{
命令代号: 具体命令,
命令代号1: 具体命令1,
命令代号2: 具体命令2
…
}
具体一点:
{
build: “node server.js”
}
则:
$ npm run build
等同于:
$ node server.js