• Nodejs模块化


    目录

    模块化概念 

     2.模块的分类

     3.模块作用域验证(防止数据污染)

     4.moudle对象

     CommonJS

     npm与包

    1.为什么需要包

     2.如何下载包

    3.npm初体验

    4.npm安装包 

     5.如何使用

    7.包的语义化版本规范

     9.快速创建 package.json

     包的分类

     2.全局包

    3.i5ting_toc可以将md文档转为html​​​​​​

    发布包——还原HTML 

    模块的加载机制

    内置模块的加载机制

     第三方模块加载机制

     目录作为模块


     

    模块化概念 

     2.模块的分类

    利用require()方法加载模块,如果是用户自定义的模块,需要指定路径 

     3.模块作用域验证(防止数据污染)

    1. const custom=require('./01_模块作用域')
    2. console.log(custom);
    1. const username='张三'
    2. function sayHello(){
    3. console.log('大家好,我是'+username);
    4. }

     4.moudle对象

     module.exports():作用就是将模块内的成员共享出去,供外界使用

    测试:模块暴露属性然后调用

    1. const username='zs'
    2. exports.username=username
    3. exports.age=20
    4. exports.sayHello=function(){
    5. console.log('hello');
    6. }
    1. const m=require('./04_exports对象')
    2. console.log(m);

     2.注意:require()方法导入模块时,导入的结果,永远以moudle.exports为主

    1. /**
    2. 在一个自定义模块中,默认情况下:module.exports={}
    3. */
    4. const age=10
    5. module.exports.age=age
    6. // 向module.exports对象上挂在一个username属性
    7. module.exports.username='zs'
    8. // 向module.exports对象上挂在sayHello方法
    9. module.exports.sayHello=function(){
    10. console.log('hello');
    11. }
    12. // 让module.exports指向一个全新的对象
    13. module.exports={
    14. nickname:'小黑',
    15. sayHi(){
    16. console.log('hello');
    17. }
    18. }
    1. /**
    2. * 在外界使用require导入一个自定义模块的时候,
    3. * 得到的成员就是module.exports所指的对象
    4. */
    5. const m=require('./03_自定义模块')
    6. console.log(m);

    moudle.exports和exports指向同一个对象,不过最终以exports指向的对象为主 

     3.总结:发现我们以exports的为主

     exports和moudle.exports的使用误区

    不建议在同一个模块同时使用exports和moudle.exports

     CommonJS

     npm与包

    1.为什么需要包

     2.如何下载包

    npm -v//查看版本

    3.npm初体验

    引入第三方的模块,然后require()进行调用,调用模块中的方法

    1. // 1.定义格式化时间的方法
    2. function dateFormat(dtStr){
    3. const dt=new Date(dtStr)
    4. const y=dt.getFullYear();
    5. const m=padZero(dt.getMonth()+1)
    6. const d=padZero(dt.getDate())
    7. const hh=padZero(dt.getHours())
    8. const mm=padZero(dt.getMinutes())
    9. const ss=padZero(dt.getSeconds())
    10. return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
    11. }
    12. // 定义补零操作
    13. function padZero(n){
    14. return n > 9 ? n : '0' + n
    15. }
    16. module.exports={
    17. dateFormat
    18. }
    1. //导入自定义的格式化时间的模块
    2. const TIME= require('./01_dataFormat')
    3. // 调用方法,进行时间的格式化
    4. const dt=new Date()
    5. const newDT=TIME.dateFormat(dt)
    6. console.log(newDT);

    4.npm安装包 

     5.如何使用

    require('包名')
    1. // 1. 导入需要的包
    2. const moment=require('moment')
    3. /**
    4. * moment():获取当前时间
    5. * format():格式化时间方法
    6. * 年:YYYY
    7. * 月:MM
    8. * 日:DD
    9. * 时:hh
    10. * 分:mm
    11. * 秒:ss
    12. * 一个h或m或s代表不补零
    13. */
    14. const dt=moment().format('YYYY-MM-DD hh:mm:ss')
    15. console.log(dt);

     6.npm install的效果

    7.包的语义化版本规范

     8.包的管理配置文件

    记录了与项目有关的配置信息

     9.快速创建 package.json

    个人感觉很像maven,npm intall相当于导入依赖,然后npm init相当于创建pom.xml 

    npm init -y //快速创建package.json

    注意事项:

    记得不能包含空格,也不能使用中文

     10.当项目中缺少moudles包,需要加载

    卸载包:npm unistall

     包的分类

     2.全局包

    3.i5ting_toc可以将md文档转为html​​​​​​

     4.包的规范

    发布包——还原HTML 

    转义字符:

    g:代表全局匹配 ,以下的意思是:只要满足这四个字符匹配就进行替换操作

    定义两个方法后进行暴露module.export={}

    1. // 定义转义html字符的函数
    2. function htmlEscape(htmlStr){
    3. return htmlStr.replace(/<|>|<&|"/g,(match)=>{
    4. switch(match){
    5. case '<':
    6. return '<'
    7. case '>':
    8. return '>'
    9. case '"':
    10. return '"'
    11. case '&':
    12. return '&'
    13. }
    14. })
    15. }
    16. // 定义还原html字符串的函数
    17. function htmlUnEscape(str){
    18. return str.replace(/<|>|"|&/g,(match)=>{
    19. switch(match){
    20. case '<':
    21. return '<'
    22. case '>':
    23. return '>'
    24. case '"':
    25. return '"'
    26. case '&':
    27. return '&'
    28. }
    29. })
    30. }
    31. module.exports={
    32. htmlEscape,
    33. htmlUnEscape
    34. }

    然后我们测试类中调用这个模块

    引入我们的第三方包,然后调用其中的方法并且打印

    1. const itcc=require('../itcc-tools/index')
    2. // 测试格式化时间的功能
    3. const dtStr=itcc.dateFormat(new Date())
    4. console.log(dtStr);
    5. // 测试转义html方法
    6. const htmlStr='

      这是h1标签123 

      '
    7. const str=itcc.htmlEscape(htmlStr)
    8. console.log(str);
    9. // 测试还原html的方法
    10. const str2 = itcc.htmlUnEscape(str)
    11. console.log(str2);

    模块的加载机制

    内置模块的加载机制

    1.模块具有优先级,内置模块的优先级>第三方模块 

     2.另外,第三方模块要指定路径的,比如../或者./;如果是内置模块,那就直接定义名称就可以了

     3.如果省略了文件扩展名,它是有个顺序的

     第三方模块加载机制

     目录作为模块

     如果以目录作为require的加载标识符,首先会去寻找目录下的package.json,并寻找里面的main属性作为入口——>否则去index.js

     

     

  • 相关阅读:
    2022年全球及中国工厂模拟软件行业头部企业市场占有率及排名调研报告
    ant-design-vue 修改a-button disabled默认样式
    Swift 中的类型占位符
    内农大《嵌入式基础》实验一 Shell编程
    167.二叉树:另一棵树的字树(力扣)
    嵌入式编程别忽略了C语言的标准
    BUUCTF题解之[极客大挑战 2019]Havefun 1
    vue使用echarts图表
    STM32CubeIDE下载安装
    【区分vue2和vue3下的element UI Table 表格组件,分别详细介绍属性,事件,方法如何使用,并举例】
  • 原文地址:https://blog.csdn.net/weixin_57128596/article/details/127846753