• node模块


    Node.js

    什么是Node.js

    http://nodejs.cn/

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境
    
    • 1
    浏览器是JavaScript的前端运行环境
    Node.jsJavaScript的后端运行环境
    Node.js中无法调用BOM,DOM等浏览器内置的API
    
    Node.js 它的内置API fs,path,http...
    
    Node.js作为JavaScript运行环境,仅仅提供了基础的功能和API
    了解:
    基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
    基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用
    基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
    
    会js 就会Node.js
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    怎么学

    浏览器中的JavaScript:
    js基础语法+浏览器内置API(DOM ,BOM)+第三方库(jQuery,art-template等)
    
    Node.js:
    js基础语法 + Node.js内置API模块(fs,path,http)+第三方模块(express)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Node.js安装

    http://nodejs.cn/

    查看已安装的Node.js 的版本号

    打开终端,输入node -v命令 按回车

    Windows系统打开终端:

    (Windows+R)运行面板,输入cmd 回车,就可以打开终端

    Node.js环境中运行js代码

    • 准备js代码

    • 打开终端(终端目录一定要指向文件目录) cd 文件路径

    • 输入 node 要执行的js文件的路径

      node 要执行的js文件的路径
      
      • 1

    终端快捷键

    上键  快速定位到上一次执行命令
    tab 快速补全
    esc   清空当前已输入的命令
    cls  清空终端
    
    • 1
    • 2
    • 3
    • 4

    Node.js三大模块

    内置模块(Node.js官方提供 fs ,path,http,…)

    自定义模块(用户创建的每个js文件,都是自定义模块)

    第三方模块(由第三方开发出来的模块,并非官方提供的内置模块)

    内置模块

    http://nodejs.cn/api/

    fs文件系统模块

    fs模块是Node.js官方提供,用来操作文件的模块,它提供了一系列方法和属性,满足用户对文件的需求
    require()用法看下面 加载模块

    // 1引入fs模块 来操作文件
    var fs = require('fs');
    /* 
    fs.readFile()
    参数1  读取文件的路径
    参数2  读取文件时候采用的编码方式  一般默认是utf8
    参数3  回调函数 拿到读取失败和成功的结果 err  data
    */
    fs.readFile('./files/aa.txt', 'utf8', function (err, data) {
      /* 
      读取文件成功,err的值为null
      读取文件失败,err的值为错误对象 data的值为undefined
      */
      console.log(err);  
      console.log("---------");
      console.log(data);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    自定义模块

    自定义模块中定义的方法,变量只能在当前模块中使用。不存在变量冲突

    加载模块

    当 Node 遇到 require(X) 时,按下面的顺序处理。
    (1)如果 X 是内置模块(比如 require(‘http’))
      a. 返回该模块。
      b. 不再继续执行。
    (2)如果 X 以 “./” 或者 “/” 或者 “…/” 开头
      a. 根据 X 所在的父模块,确定 X 的绝对路径。
      b. 将 X 当成文件,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。

    • X
    • X.js
    • X.json
    • X.node

    c. 将 X 当成目录,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。

    • X/package.json(main字段)
    • X/index.js
    • X/index.json
    • X/index.node

    (3)如果 X 不带路径
      a. 根据 X 所在的父模块,确定 X 可能的安装目录。
      b. 依次在每个目录中,将 X 当成文件名或目录名加载。
    (4) 抛出 “not found”

    require()可以加载需要的内置模块,用户自定义模块,第三方模块

    向外共享

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

    console.log(module);
    
    • 1

    会得到差不多这样的Module对象:

    Module {
      id: '.',
      path: 'C:\\xxx\\code\\moudle',
      exports: {},
      parent: null,
      filename: 'C:\\xxx\\code\\moudle\\com.js',
      loaded: false,
      children: [],
      paths: [
        'C:\\xxx\\code\\moudle\\node_modules',
        'C:\\xxx\\code\\node_modules',
        'C:\\xxx\\node_modules',
        'C:\\node_modules'
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用

    外界用require()导入自定义模块,得到的就是module.exports所指向的对象

    exports对象

    由于module.exports单词写起来比较复杂,为了简化向外共享成员的代码,Node提供了exports对象

    exports和module.exports指向同一个对象

    exports.username = "zs";
    exports.sayHello = function () {
      console.log("hello")
    }
    
    console.log(module.exports === exports);   //true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    外界require方法导入模块时,永远以module.exports指向的对象为准

    // 可以这样写:
    module.exports = {
      username: "zs",
      sayHello: function () {
        console.log(123)
      }
    }
    // 但不能这样写:
    exports = {}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    不能给exports直接赋值一个新对象 永远以module.exports指向的对象为准
    module.exports指向的对象就是全局内置对象
    如果直接给exports赋值一个新对象,就只是改变了exports的指向,exports指向的就不再是全局内置对象

    Node.js中的模块化规范

    Node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性和各模块之间如何相互依赖

    CommonJS规定:

    • 每个模块内部,module变量代表当前模块
    • module变量是一个对象,它的exports属性(module.exports)是对外的接口
    • 加载某个模块,其实就是加载模块的module.exports属性,require方法用于加载模块

    模块化

    什么是模块化

    模块化是指解决一个复杂问题时,自顶向下逐层把系统划分为若干模块的过程

    编程领域的模块化

    就是遵守固定的规则,把一个大文件拆成独立的多个小模块

    • 提高了代码的复用性
    • 提高了代码的可维护性
    • 可以实现按需加载

    模块化的规范

    模块化的规范就是对代码进行模块化的拆分和组合时,需要遵守的规则

    • 如何引入模块
    • 在模块中使用什么样的语法向外暴露成员

    npm和包(第三方模块)

    什么是包

    Node.js中的第三方模块又叫做包

    包的来源

    不同于Node.js的内置模块和自定义模块,包是由第三方个人或团队开发出来的,免费使用

    为什么要使用包

    Node.js提供的Api开发效率低

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

    下载包

    国外的一家IT公司,叫做npm ,Inc ,这家公司的著名的网站https://www.npmjs.com/全球最大的包共享平台

    提供了一个地址 https://registry.npmjs.org/,来对外共享所有的包,我们可以从这个服务器下载自己所需要的包

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

    npm

    所以npm就是个 包管理工具

    这个包管理工具随着node的安装一起被安装到了用户的电脑上

    终端输入命令 npm -v查看自己电脑上安装的npm包管理工具的版本号

    项目中安装 包

    npm install 包的完整名称
    简写
    npm i 包的完整名称
    
    • 1
    • 2
    • 3

    初次装包完成,项目文件下多一个叫node_modules文件夹和package-lock.json和package-lock.json文件

    node_modules 存放所有已安装到项目中的包  require导入第三方包时,就是从这个目录中查找并加载包
    package-lock.json 配置文件用来记录node_modules目录下每一个包的下载信息,包的名字,版本号 下载地址
    
    不需要手动修改这两个文件 npm包管理工具会自动维护它们
    
    • 1
    • 2
    • 3
    • 4

    包管理配置文件package.json

    npm规定,在项目目录中,必须提供一个叫做package.json的包管理配置文件,用来记录与项目有关的一些配置

    • 项目名称版本号 描述
    • 项目中都用到了哪些包
    • 哪些包只在开发期间用到
    • 哪些包在开发和部署时都需要用到

    项目目录中,创建一个package.json的配置文件,可用来记录项目中安装了哪些包,方便删除node_modules目录之后,在团队成员之间共享项目的源代码
    在项目开发中,一定要把node_modules文件夹,添加到.gitignore忽略文件中 不需要被git所管理

    创建该文件命令:

    npm init -y
    
    • 1

    该命令只能在英文的目录下运行成功

    dependencies节点

    package.json文件中,有一个dependencies节点,专门用来记录您使用npm install 命令安装了哪些包

    一次性安装所有的包

    npm i    
    或者
    npm install
    
    • 1
    • 2
    • 3
    卸载包
    npm uninstall  moment
    
    • 1

    devDependencies

    有些包只在项目开发阶段会用到,在项目上线之后不会用到,建议把这些包记录到devDependencies节点中 (比如scss)

    有些包在项目开发阶段和项目上线之后都会用到建议把这些包记录到dependencies节点中

    //记录到devDependencies节点中
    npm i 包名 -D
    //完整写法
    npm install 包名 --save-dev
    
    • 1
    • 2
    • 3
    • 4

    解决包下载慢的问题

    nrm工具,利用nrm提供的终端命令可以快速查看和切换包的镜像源

    -g 全局  下载工具需要加-g  在电脑的任何一个地方都可以使用
    
    //下载nrm安装全局可用的工具
    npm i nrm -g
    //查看所有的镜像源
    nrm ls
    
    将下包的镜像源切换到taobao
    nrm use taobao
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    https://registry.npm.taobao.org/
    
    https://yarnpkg.com/zh-Hans/docs/package-json
    
    • 1
    • 2
    • 3

    包的分类

    npm包管理工具下载的包,分为两大类

    • 项目包

      被安装到项目的node_modules目录中的包,都是项目包

      • 开发依赖包(被记录到devDependencies节点中的包,只在开发期间会用到)
      • 核心依赖包(被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到)
    • 全局包

      执行npm install 命令是 提供了-g参数 安装的就是全局包

      全局包被安装到C:\Users\54004\AppData\Roaming\npm\node_modules中 只有工具性质的包,才有全局安装的必要性

  • 相关阅读:
    人血清白蛋白-马来酰亚胺;HSA-MAL;HSA-PEG-MAL简介
    面试官问你的项目经验,这样说指定给你加分
    OAK 3D人工智能相机和RealSense系列相机的对比
    深度学习求解微分方程系列四:一种基于自适应激活函数的PINN求解方法—burger方程逆问题
    2022最新 wifi大师小程序独立版3.0.8
    【经验分享】恋爱中出现了中间人怎么办?
    曦力音视频转换工具Xilisoft Video Converter Ultimate mac中文版
    jsp基础语法
    Map学习笔记——深入理解ConcurrentHashMap
    LeetCode SQL专项练习 (8) 计算函数
  • 原文地址:https://blog.csdn.net/qq_45025670/article/details/126105968