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 对象,它里面存储了和当前模块有关的信息,打印如下:

java 加载 nodejs 环境_包名

2. module.exports 对象

在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。
外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象。

使用 require() 方法导入模块时,导入的结果,永远以 module.exports 指向的对象为准

3. exports 对象

默认情况下,exports 和 module.exports 指向同一个对象。最终共享的结果,还是以 module.exports 指向的对象为准。
exports对象和module.exports不要同时使用

模块化规范 CommonJS

  1. 每个模块内部,module 变量代表当前模块
  2. module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口
  3. 加载某个模块,其实是加载该模块的 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

包的规范化结构

  1. 一个规范的包,它的组成结构,必须符合以下 3 点要求:
  2. 包必须以单独的目录而存在
  3. 包的顶级目录下要必须包含 package.json 这个包管理配置文件
  4. package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口

发布一个属于自己的包

  1. 创建一下包的结构
  2. 配置package.json
{
  "name": "hjc_format",		//包的名称 跟目录名相同
  "version": "1.0.0",		//版本号
  "main": "./index.js",		//入口文件
  "keywords": ["format"],	//关键词
  "author": "hjc",			//作者
  "license": "ISC"			//开源协议
}
  1. 编写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
}
  1. 编写index.js入口文件
//导入木块
const df = require('./src/dateFormat');
//向外部共享
//ES6中 ...拓展运算符  遍历对象的属性值
module.exports = {
    ...df,
    ...html
}
  1. 外部可以导入这个模块使用 02.test.js
//导入模块
const hjc = require('./hjc_format');
//当前时间
const dt = new Date();
//调用模块的方法并输出
console.log(hjc.dateFormat(dt));
  1. 在npm发布自己的包
//在终端先切换到包的根目录
cd *******
//在终端登录npm(必须切换到npmjs源)
npm login
//输入账号 密码 邮箱
//上传自己的包
npm publish
//删除自己的包
npm unpublish 包名 --force

npm unpublish 命令只能删除 72 小时以内发布的包
npm unpublish 删除的包,在 24 小时内不允许重复发布
发布包的时候要慎重,尽量不要往 npm 上发布没有意义的包

模块加载机制

  1. 优先从缓存中加载,(模块在第一次加载后会被缓存)
  2. 内置模块的加载机制(内置模块的加载优先级最高,当第三方包跟内置模块同名,只加载内置模块)
  3. 自定义模块的加载机制
  4. java 加载 nodejs 环境_包名_02

  5. 第三方模块/包加载机制
  6. java 加载 nodejs 环境_nodejs_03

  7. 目录作为模块的加载机制
  8. java 加载 nodejs 环境_加载_04