Nodejs基础和NPM包管理
- Nodejs基础
- fs模块
- 读取功能fs.readFile()
- 写入功能fs.wirteFile()
- path模块
- path.join() 动态拼接路径
- path.basename() 获取文件名
- path.extname() 获取文件格式
- http模块
- 创建一个简单的Web服务器
- 模块化
- 向外共享模块作用域中的成员
- 1. module对象
- 2. module.exports 对象
- 3. exports 对象
- 模块化规范 CommonJS
- npm包
- npm命令
- 使用第三方包demo案例
- 包的规范化结构
- 发布一个属于自己的包
- 模块加载机制
Nodejs基础
fs模块
读取功能fs.readFile()
写入功能fs.wirteFile()
//先导入模块
const fs = require('fs');
// 参数1:文件路径
// 参数2:编码格式
// 参数3:回调函数
fs.readFile('files/1.txt','utf-8',function(err,data){
// 当请求成功err为null
console.log(err);
// 请求成功的内容
console.log(data);
})
// 参数1:文件路径
// 参数2:编码格式
// 参数3:回调函数
fs.writeFile('files/2.txt','utf-8',(err)=>{
// 当写入成功时,err为null
console.log(err);
});path模块
path.join() 动态拼接路径
path.basename() 获取文件名
path.extname() 获取文件格式
//先导入path模块
const path = require('path');
//动态拼接路径
const str = path.join(__dirname,'/files/1.txt');
// console.log(str);
//从url解析出文件名
const res1 = path.basename(str);
//从url解析出 文件格式为txt的文件名
const res2 = path.basename(str,'.txt');
//从url解析出 文件名的拓展名
const res3 = path.extname(str);
console.log(res1);
console.log(res2);
console.log(res3);http模块
创建一个简单的Web服务器
// 创建一个简单的web服务器
// 第一步导入模块
const http = require('http');
// 第二步创建server
const server = http.createServer();
// 第三步 监听服务器request请求
server.on('request',(req,res)=>{
//req是请求对象
const url = req.url; //请求路径
const method = req.method; //请求方法
//响应中文要响应请求头
res.setHeader('Content-Type','text/html;charset=utf-8');
//res响应对象
res.end("你请求的地址是"+url+"请求方法是"+method);
})
// 第四步 启动服务器 8080是端口号
server.listen(8080,()=>{
console.log("Server running at 127.0.0.1:8080");
})模块化
用require()方法加载模块,会执行被加载模块的代码
可以省略加载文件.js的后缀名
模块作用域
向外共享模块作用域中的成员
1. module对象
在每个 .js 自定义模块中都有一个 module 对象,它里面存储了和当前模块有关的信息,打印如下:
2. module.exports 对象
在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。
外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象。使用 require() 方法导入模块时,导入的结果,永远以 module.exports 指向的对象为准
3. exports 对象
默认情况下,exports 和 module.exports 指向同一个对象。最终共享的结果,还是以 module.exports 指向的对象为准。
exports对象和module.exports不要同时使用
模块化规范 CommonJS
- 每个模块内部,module 变量代表当前模块
- module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口
- 加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块
npm包
最大的包共享平台 www.npmjs.com
从 https://www.npmjs.com/ 网站上搜索自己所需要的包
从 https://registry.npmjs.org/ 服务器上下载自己需要的包
npm命令
//1.1 安装命令
npm install 包名
//1.2 简化安装命令
npm i 包名
//1.3 安装指定版本命令
npm i 包名 @版本号
//2.1 包配置文件 package.json
//2.2 记录项目中用到的包
//2.3 注意:今后在项目开发中,一定要把 node_modules 文件夹,添加到 .gitignore 忽略文件中。
//2.4 dependencies节点 记录项目用npm命令安装了哪些包
//2.5 devDependencies节点 记录了只在项目开发阶段会用到,在项目上线之后不会用到的包
//3.1 快速创建package.json文件
npm init -y
//4.1 卸载包命令
npm uninstall 包名
//4.2 卸载全局包命令
npm uninstall 包名 -g
//5.1 查看当前下包的镜像源
npm config get registry
//5.2 切换当前下包的镜像源 切换至淘宝镜像源
npm config set registry=http://registry.npm.taobao.org/
//6.1 nrm工具
//6.2 安装命令:全局安装
// npm i nrm -g
//6.3 查询可用源命令
// npm ls
//6.4 切换源
// npm use taobao使用第三方包demo案例
//1.先用npm下载moment包
// npm i moment
//2.导入moment第三方包
const moment = require('moment');
//3.获取当前日期
const time = moment().format('YYYY-MM-DD HH:mm-ss');
//4.打印结果
console.log(time);
//5.输出结果
// 2021-05-20 14:32-22包的规范化结构
- 一个规范的包,它的组成结构,必须符合以下 3 点要求:
- 包必须以单独的目录而存在
- 包的顶级目录下要必须包含 package.json 这个包管理配置文件
- package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口
发布一个属于自己的包
- 创建一下包的结构
- 配置package.json
{
"name": "hjc_format", //包的名称 跟目录名相同
"version": "1.0.0", //版本号
"main": "./index.js", //入口文件
"keywords": ["format"], //关键词
"author": "hjc", //作者
"license": "ISC" //开源协议
}- 编写src/dateFormat.js功能代码
//格式化时间
function dateFormat(date){
const dt = new Date(date);
const y = padZero(dt.getFullYear());
const m = padZero(dt.getMonth()+1);
const d = padZero(dt.getDate());
const hh = padZero(dt.getHours());
const mm = padZero(dt.getMinutes());
const ss = padZero(dt.getSeconds());
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
}
//补零
function padZero(n){
return n>9?n:'0'+n;
}
//向外部共享
module.exports = {
dateFormat
}- 编写index.js入口文件
//导入木块
const df = require('./src/dateFormat');
//向外部共享
//ES6中 ...拓展运算符 遍历对象的属性值
module.exports = {
...df,
...html
}- 外部可以导入这个模块使用 02.test.js
//导入模块
const hjc = require('./hjc_format');
//当前时间
const dt = new Date();
//调用模块的方法并输出
console.log(hjc.dateFormat(dt));- 在npm发布自己的包
//在终端先切换到包的根目录
cd *******
//在终端登录npm(必须切换到npmjs源)
npm login
//输入账号 密码 邮箱
//上传自己的包
npm publish
//删除自己的包
npm unpublish 包名 --forcenpm unpublish 命令只能删除 72 小时以内发布的包
npm unpublish 删除的包,在 24 小时内不允许重复发布
发布包的时候要慎重,尽量不要往 npm 上发布没有意义的包
模块加载机制
- 优先从缓存中加载,(模块在第一次加载后会被缓存)
- 内置模块的加载机制(内置模块的加载优先级最高,当第三方包跟内置模块同名,只加载内置模块)
- 自定义模块的加载机制
- 第三方模块/包加载机制
- 目录作为模块的加载机制




















