自定义模块和第三方模块,cnmp

本文介绍了Node.js中的模块化概念,包括模块化的原因、Common.js规则、模块分类及自定义模块的创建。详细讲解了npm的使用,如安装、卸载包,以及配置cnpm以加速模块下载。同时,探讨了模块的加载机制,包括内置、自定义和第三方模块的查找顺序。
摘要由CSDN通过智能技术生成

目录

1.模块化简介

(1) 传统开发项目结构 的 缺陷

(2)模块化

(3)模块化的优点

2.Common.js模块化规则

3.模块的分类

4.自定义模块

5.第三方模块

npm和包

npm的相关命令

npm 生成package.json

6.配置cnpm

7.各种模块的加载机制


 

1.模块化简介

(1) 传统开发项目结构 的 缺陷

  • 不利于后续维护 和 二次开发(不好管理,项目结构混乱)

(2)模块化

  • 按照一定的规则 将js代码功能进行封装

(3)模块化的优点

  • 规范化:由于所有模块 都按照指定的规则进行封装 因此 可以做到格式上的统一

  • 代码复用高

  • 易维护:如果某一个模块除了问题 就只会影响到使用该模块的功能 不影响其他功能 而且 解决问题的时候 也方便定位

2.Common.js模块化规则

  • 这个模块化规则 是node中 使用的规则

    • 模块js文件中 通过exports/module.exports 暴露数据/变量

    • 在哪个js文件中 需要使用这些数据 就在哪个js文件中 引入该模块 即可 require

3.模块的分类

  • 内置模块

  • 自定义模块(见上一篇)

  • 第三方模块

4.自定义模块

  • 自定义模块 就是我们自己封装 模块js文件

    //1.编写模块js代码
    //封装函数 通过函数编写各种功能
    let fn1 = ()=>{....};
    let fn2 = ()=>{....};
    ....
    //2.将功能函数 暴露出去
    //我们可以通过module.exports将数据暴露出去 
    //module.exports本身是一个 对象  我们可以通过给他添加属性和方法的方式 将数据暴露出去
    //本质上 模块js文件 暴露的 就是module.exports
    module.exports.fn1 = fn1
    module.exports.fn2 = fn2
    ...
    
    //我们也可以专门暴露某一个指定数据
    //单个暴露
    //本质上 模块js文件 暴露的 就是module.exports
    module.exports = 要暴露的数据
    
    
    //exports
    //我们还可以使用 exports 来暴露模块数据 但是 这种方式只能批量暴露 不能单个暴露
    //批量暴露 和 module.exports的暴露方式相同
    //就是将 要暴露的数据 作为属性或方法 添加给exports 即可
    exports.fn1 = fn1;
    exports.fn2 = fn2;
    ....
    //exports 本质是一个变量  let exports = module.exports
    //module.exports本质上是一个对象  因此 exports 是由 module.exports直接赋值的 因此二者会互相影响
    //因此 我们给exports添加属性 就相当于 给 module.exports 添加属性
    
    
    //exports不能像module.exports一样 单个暴露数据
    //因为 exports是一个变量 其值为 module.exports
    //let exports = module.exports
    //因此 如果想像module.exports一样单个暴露数据  就会写作:exports = 要暴露的数据
    //这样写 exports 就和 module.exports毫无关系了 因此也就暴露不了了

  • 模块暴露数据的方式有三种
    • 单个暴露——一种

      • module.exports = 要暴露的数据

    • 批量暴露——两种

      • module.exports.属性名/方法名 = 要暴露的数据

      • exports.属性名/方法名 = 要暴露的数据

  • 引入模块js中暴露的数据的方式 两种

    • let 变量 = require("模块名/路径")

    • let {变量名1,变量名2,...} = require("...")

 

5.第三方模块

npm和包

  • npm:node package manager node的包管理工具

    • 我们如果想使用第三方模块 需要单独对模块进行下载和安装 下载安装的操作 就由npm来完成

    • npm 已经内置到了 node安装包中 因此 我们安装node之后 就会捆绑安装npm

    • 在cmd命令行中 我们可以通过 npm -v命令 检测我们安装的npm的版本

  • npm的作用

    • 1.下载并安装第三方模块包

    • 2.管理本地的模块包

  • 我们下载第三方模块包 都是从 npm官网进行下载——npm

npm的相关命令

  • 下载并安装第三方模块——npm install 模块包名 / npm i 包名 默认安装方式 安装的就是产品依赖

  • 下载并安装指定版本的模块——npm i 包名 @版本号

  • 下载开发依赖—— npm install 包名 --save-dev / npm i 包名 -D

  • 下载产品依赖—— npm install 包名 --save / npm i 包名 -S

  • 注意:当我们在项目文件夹中 第一次安装第三方模块包的时候 就会自动生成一个文件夹——node_modules 和 一个文件 package-lock.json

    • node_modules文件夹:用来存放 我们下载安装的模块包 以及 其所依赖的模块包

    • package-lock.json文件:用来 记录我们下载安装过的 模块包 的相关信息

  • 卸载第三方模块包:npm uninstall 模块包名 / npm r 包名

  • 全局安装:npm i 包名 -g

    • 全局安装的模块包 在任何路径下 都可以使用

    • 非全局安装的模块包 只能在自己的项目文件夹中使用

    • 下面 我们以 nodemon模块 来演示

      • nodemon模块 是 node代码运行的热更新 工具

      • 1.在cmd中 输入 npm i nodemon -g

      • 2.全局安装的模块包 会保存在 C:\Users\Administrator\AppData\Roaming\npm\node_modules

      • 3.我们需要先检查一下 环境变量 如果环境变量Path中 有上述值,我们就可以直接使用了 如果没有 需要我们自己写入

        • 控制面板--->系统--->高级系统设置--->环境变量--->配置Administrator的Path变量

        • 就是将C:\Users\Administrator\AppData\Roaming\npm\node_modules 添加到path中即可

        • 注意:path中各个路径之间 要使用 分号隔开

        • C:\Users\Administrator\AppData\Roaming\npm;C:\Users\Administrator\AppData\Roaming\npm\node_modules

      • 4.测试 能不能在任意文件夹 使用nodemon

      • nodemon的用法

        • 在执行js文件的时候 我们可以使用nodemon命令——nodemon 文件名

        • 这样执行的js文件 会实现 热更新、

      • 在cmd命令行工具中 结束命令的快捷键 是 ctrl+c

  • 全局卸载:npm r 包名 -g

    • 卸载的是 C:\Users\Administrator\AppData\Roaming\npm\node_modules中的模块包

npm 生成package.json

  • 生成命令:npm init / npm init -y

    • npm init : 需要我们手动进行确认

    • npm init -y:自动生成 不需要确认 所有参数都是用默认值

  • 当我们执行 npm init命令后 会要求我们确认以下信息

    • package name: 默认值为当前项目文件夹名

      • 注意:不能设置为中文

    • version:版本号 默认 1.0.0

    • description:项目描述信息

    • entry point:入口文件 可以自行设置

    • test command:测试命令 可以手动配置 我们不在这里配置

    • git repository:git远程仓库地址

    • keywords:关键词

    • author:作者

    • license:协议

  • //生成好的package.json 内容如下
    {
      "name": "allens-program",//项目包名
      "version": "1.0.0",//项目版本号
      "description": "this is allen's project",//项目描述信息
      "main": "01-test.js",//项目入口文件
      "dependencies": {
        "trim": "^1.0.1"//当前项目中 安装的 模块包
      },
      "devDependencies": {},//当前项目中 安装的 开发依赖 模块包
      "scripts": {//scripts属性中 存放的是 当前项目中 所有可以使用的命令 这些命令的用法为:npm run 命令名
          //但是 如果我们配置命令名为start 的命令 则可以直接写 npm start
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "allen",//作者
      "license": "ISC"//协议
    }

  • 注意:json文件的编写规则

    • 在json文件的对象中 属性名 必须加 双引号

    • 数组和对象 最后一个成员 后面都不能加 逗号

    • 一个json文件中 只能写一个数据

    • json文件中不能写注释

单独说明

  • scripts:用来配置 项目中的快捷命令 我们可以通过配置快捷命令的方式来实现代码的快速开发

    •   "scripts": {//scripts属性中 存放的是 当前项目中 所有可以使用的命令 这些命令的用法为:npm run 命令名
            //但是 如果我们配置命令名为start 的命令 则可以直接写 npm start
          
      

6.配置cnpm

作用:cnpm 可以在网速不好的时候 帮助我们下载第三方模块 更快捷

  • 原因:npm下载模块 是从境外服务器上 因此 速度慢 cnpm 下载模块 是从 国内服务器(淘宝镜像上) 因此速度更快

  • 如果网速不好的时候 简易配置cnpm

  • 配置命令

  • 配置cnpm:npm install -g cnpm@指定版本 --registry=https://registry.npm.taobao.org

    • 注意:如果是nodev12版本 需要使用6版本的 cnpm 版本如果出问题 会导致报错 如果是最新稳定版node 就可以使用最新版本的cnpm

    • 配置npm的下载源:npm config set registry https://registry.npm.taobao.org
  • cnpm命令 和 npm命令 完全相同 只是将npm 改为了 cnpm

7.各种模块的加载机制

  • 内置模块包的加载机制

    • 内置模块的优先级最高 会优先加载

    • 具体体现

      • let fs = require("fs");
        //如果我们这时 下载了一个第三方模块 也叫 fs 这里引入的fs模块 就一定是 内置的fs模块

  • 自定义模块的加载机制

    • 自定义模块的引入:let 变量 = require("相对路径")

    • 使用require()加载自定义模块时,必须指定以./或../开头 如果没有指定./或../这样的路径标识符,则Node.js会把它当作内置模块或第三方模块进行加载。

      • //假设自定义模块 就写在当前文件夹中
        let 变量名 = require("./模块名")
    • 自定义模块不要放在node_modules中。

      • 注意:我们在编写node代码的时候 不要动node_modules文件夹

    • 在引入自定义模块的时候 可以省略其后缀名

      • 原因:如果我们省略了后缀名 node会执行如下操作

        • 1.默认给我们补充.js后缀名 进行查找 如果找到了 就引入 如果没找到

        • 2.就继续给我们重新替换后缀名为.json 继续进行查找 如果找到了,就引入json文件 如果还没找到

        • 就报错 cannot find module "xxx"

  • 第三方模块加载机制

    • 1.先在当前文件夹的node_modules文件夹中 查找第三方模块 如果找到 就直接引入并使用

    • 2.就向上一级父文件夹中的node_modules文件夹中 查找模块 如果有 就直接引入 如果还没有 就继续向上一级父文件夹查找 一直查找到 根目录 如果有就可以引入 如果到根目录还没有

    • 3.去环境变量中 配置过的路径中 查找其中的node_modules文件夹 如果有模块 就可以引入 如果还没有 就报错cannot find module "xxx"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值