Node.js-第四课 发布包 模块的加载机制

目录

发布包

初始化包的基本结构

初始化package.json 

index.js编写

模块化拆分

编写包的说明文档 README

发布包

注册npm账号

终端登录

把包发布到npm上

删除已发布的包


发布包

实例:包功能

格式化时间,HTML特殊字符转义,转义的特殊字符还原

初始化包的基本结构

  1. 创建文件夹,作为包的根目录
  2. 创建三个文件
  •  package.json (包管理配置文件)
  • index.js (包入口文件)
  • README.md (包的说明文件)

 

 

初始化package.json 

{
    "name": "tools-demo-gyh",
    "version": "1.0.0",
    "main": "index.js",
    "description": "提供了格式化时间功能",
    "keywords": ["dateFormat"],
    "license": "ISC"
}

name 包名

        供别人下载使用

        注意:在https://www.npmjs.com/检索是否重名

 

 version 版本

        一般新的包都是1.0.0开始

main 入口文件

        使用时导入的文件入口

description 包简单介绍 

        搜索包时看到简介,知道基本功能

 

keywords 搜索的关键字

        是个数组,每一项是一个字符串

license 开源许可协议

npm希望使用默认提供的 ISC 许可协议

index.js编写

在index.js定义方法

// 这是包的入口文件

// 时间格式化
function dateFormat(dateStr) {
    // 实例化日期类
    const time = new Date(dateStr);
    // 获取完整的年份(4位)
    const year = time.getFullYear();
    // 获取月份(0-11,0代表1月)
    const month = time.getMonth() + 1;
    // 获取日期(1-31)
    const date = time.getDate();
    // 获取小时
    let h = time.getHours();
    h = h < 10 ? '0' + h : h;
    // 获取分钟
    let m = time.getMinutes();
    m = m < 10 ? '0' + m : m;
    // 获取秒钟
    let s = time.getSeconds();
    s = s < 10 ? '0' + s : s;
    //测试打印
    console.log(`${year} 年${month} 月${date} 日 ${h}:${m}:${s}`);


    // 合并返回
    return `${year}年${month}月${date}日 ${h}:${m}:${s}`;
}


// 向外暴露需要的成员
module.exports = {
    dateFormat
}

外界导入,因为main指定了入口。所以导入只写文件夹也可以找到

const tools = require('./npm/tools-demo-gyh/index')
const tools = require('./npm/tools-demo-gyh')

模块化拆分

不同的方法放到不同的js中

index.js

        导入模块,得到需要向外共享的方法

        导出方法

编写包的说明文档 README

安装方法,导入方式,格式化时间,转义HTML特殊字符,使用方法。开源协议

发布包

注册npm账号

https://www.npmjs.com/

登录邮箱,点击验证链接,激活账号

终端登录

npm login

注意:在运行npm login命令之前,必须先把下包的服务器地址切换为npm的官方服务器,否则会导致发布包失败 (nrm ls检查一下)

把包发布到npm上

终端切换到包的根目录,运行

npm publish

  包名要唯一,不可雷同

删除已发布的包

npm unpublish

        只能删除72小时以内发布的包,

        删除的包,在24小时内不允许重复发布

        尽量不要往npm上发布没有意义的包

模块的加载机制

模块在第一次加载后会被缓存,这也意味着,多次调用require()不会导致模块的代码被执行多次

不论是内置模块,自定义模块,第三方模块,都优先从缓存中加载,从而提高模块的加载效率

内置模块的加载机制

内置模块的加载优先级最高。如果node_modules有重名的。优先加载内置模块

自定义模块的加载机制

必须指定以./../开头的路径表示符,如果没有指定,则node会把它当成内置模块或第三方模块进行加载

导入时,如果省略了文件名,则Node.js会按顺序分别尝试加载一下文件

              安装确切的文件名进行加载

                补全.js拓展名进行加载

                补全.json拓展名进行加载

                补全.node拓展名进行加载

                 加载失败,终端报错

第三方模块的加载机制

从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块

如果没有找到对应的第三方模块,则移动到再上一次的父目录中,进行加载,知道文件系统的根目录

目录作为模块

当把目录当作模块标识,进行加载

  1. 在被加载的目录下找package.json,找到main属性,
  2. 如果目录中没有package.json,或main入口不存在或无法解析,则Node.js将会是土加载目录下的index.js文件
  3. 如果上面都失败,则终端打印错误信息

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高高i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值