• NodeJs的模块化和包


    模块化的基本概念#

    什么是模块化?#

    模块化是解决一个复杂问题时,自顶向下逐层把系统划分为若干个模块的过程,编程中,就是遵守一定规则,把一个大文件拆成独立并相互依赖的多个小模块。

    模块化规范#

    使用什么样的语法格式引用模块和向外暴露成员

    CommonJS规范#

    Node.js 遵循了 CommonJS 的模块化规范。其中:

    • 每个模块内部,module变量代表当前模块
    • 导入其它模块使用require()方法
    • 模块对外共享成员使用 module.exports 对象

    ES6 模块化规范#

    是浏览器端与服务器端通用的模块化开发规范。它的出现极大的降低了前端开发者的模块化学习成本,开发者不需再额外学习 AMD、CMD 或 Commonjs 等模块化规范。
    ES6 模块化规范中定义:

    • 每个js文件都是一个独立的模块
    • 导入其它模块成员使用 import 关键字
    • 向外共享模块成员使用 export 关键字

    在Node.js中设置ES6模块化规范:

    1. 安装v14.15.1或更高版本的node.js
    2. package.js的根节点添加"type:""module"节点

    Node.js中的模块化#

    Node.js中模块的分类#

    • 内置模块:官方提供的fs、path、http等
    • 自定义模块:用户创建的每个.js文件,都是自定义模块
    • 第三方模块:由第三方开发的,需要下载的模块

    加载模块#

    文章以CommonJS规范为例

    //内置模块
    const http = require('http')
    //自定义模块
    const custom = require('./custom.js')//后缀名可以省略
    //第三方模块
    const moment = require('moment')
    

    注意:当使用require加载时,会执行被加载模块的代码

    模块作用域#

    在自定义模块中定义的变量和方法等成员,只能在当前模块被访问,防止全局变量污染的问题

    //username.js
    const username='张三'
    
    function sayHello(){
        console.log("大家好,我是"+username)
    }
    
    //test.js
    const custom=require('./username')
    console.log(custom)//输出:{} 空对象
    

    向外共享成员#

    module对象#

    每个.js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息

    module.exports对象#

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

    //username.js
    module.exports.username = '张三'
    module.exports.sayHello = function () {
        console.log("大家好,我是" + username)
    }
    

    注意:

    • module.exports默认指向空对象
    • 使用require()方法导入的结果,以module.exports指向的对象为准

    exports对象#

    为了简化,Node提供了exports对象。默认情况下,exportsmodule.exports指向同一个对象。

    exports.username= '张三'
    module.exports={
        gender:'男',
        age:22
    }
    //{gender:'男',age:22}
    
    module.exports.username= '张三'
    exports={
        gender:'男',
        age:22
    }
    //{username:'张三'}
    
    • 使用require()方法导入的结果,永远以module.exports指向的对象为准
    • 防止混乱,不要在同一个模块中同时使用exportsmodule.exports

    npm和包#

    #

    在Node.js中第三方模块叫做,来自于第三方个人或团队,免费且开源。

    包基于内置模块封装出来,提供了更高级、更方便的API,极大的提高了开发效率。

    包的下载#

    • https://www.npmis.com/ 网站上搜索自己所需要的包
    • 从https://registry.npmis.org/ 服务器上下载自己需要的包

    使用npm包管理工具(Node Package Manager)

    npm install 包的完整名称
    npm i 包的完整名称 -g//全局安装
    npm install moment@2.22.2
    
    npm uninstall 包的完整名称
    

    node_modules文件夹用来存放所有已安装到项目中的包

    package-lock.json配置文件用来记录node_modules目录下每一个包的下载信息

    包的版本号:“点分十进制”

    第一位数字:大版本

    第二位数字:功能版本

    第三位数字:Bug修复版本

    (只要前面的版本号增长,后面归零)

    包管理配置文件#

    npm规定,项目根目录中,必须提供一个package.json的包管理配置文件

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

    dependencies节点#

    专门记录使用npm insatll命令安装了哪些包

    npm install
    //执行该命令,npm会读取package.json中的dependencies节点,一次性下载所有的包
    

    devDependencies节点#

    如果某些包只在开发中用到,建议安装在devDependencies节点

    npm i 包的完整名称 -D
    npm i 包的完整名称 --save-dev
    

    包下载慢的问题#

    切换npm的下包镜像源

    npm config get registry //查看当前镜像源
    npm config set registry=xxxxxxxxxx//切换镜像源
    

    nrm工具

    npm i nrm -g
    nrm ls//查看所有镜像源
    nrm use taobao//切换镜像源
    

    包的分类#

    项目包和全局包、开发依赖包和核心依赖包

    规范的包结构#

    1. 包必须以单独的目录出现
    2. 包的顶级目录必须包含package.json这个包配置文件
    3. package.json必须包含nameversionmain这三个属性,分别代表包的名字、版本号、包的入口

    #

  • 相关阅读:
    ORB-SLAM2 ---- ExtractorNode::DivideNode函数
    Linux中make命令和makefile文件的编写,最后附完整代码。
    ElasticSearch7.3学习(十七)----搜索结果字段解析及time_out字段解析
    【JAVA面试八股文】之并发和多线程
    comfyui安装指南及animaldiff使用
    双胶合透镜初始设计
    一款比 K8S 更好用的编排工具——Nomod
    【学习笔记】EC-Final 2022 K. Magic
    云原生周刊 | AWS 开源 macOS 容器开发工具 Finch | 2022-11-28
    插件化编程之WebAPI统一返回模型
  • 原文地址:https://www.cnblogs.com/gfhcg/p/17241140.html