IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> nodeJs中的模块化 -> 正文阅读

[JavaScript知识库]nodeJs中的模块化

为什么要学习模块化?

? ? 首先要明确:模块化:一个js文件中可以引入另一个js文件的数据。

这个特点是很基础的要求,只要是编程语言都有。而js2015年之前没有;js没有(疼点:多个js都放在一个html文件,而不用相互引用),2015年出了ES6。在语法层面就支持模块化,但是浏览器不支持,所有前面学习传统开发时,还是多个js都放在一个html文件

浏览器不支持,可以:

1.先用开发工具(wepack)搭建一个支持模块化的环境

2.在这个环境中写模块化代码

3.用工具打包打包代码,然后在浏览器中运行

nodeJS和浏览器?

相同点:都是JS代码的运行环境

nodeJS环境是支持模块化的

3.nodejs中的模块化

导出:module.exports ,exports

导入: 自定义模块: const xxx=require(模块文件中的相对位置)

内置模块 :const xxx=require(模块的名字)

第三方模块:const xxx=require(模块的名字)

1. 概念:模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程,对于整个系统来说,模块是可组合,分解和跟换的单元。

2.编程领域中的模块化

编程领域中的模块化,是把一个大文件拆成独立并互相依赖的多个小模块

3.模块的三大类

1.内置模块

由于 Node.js官方提供

2.自定义模块

自己创建的js文件

3.第三方模块

要去官网进行下载

4.require() 函数加载模块

? 1. 作用:使用require()方法加载其它模块时,会执行被加载模块中的代码

? ? ? 注意:在使用require加载用户自定义模块期间,可以省 .js的后缀名?

// yourModule.js?? ?
exports = 1

//index.js
const yourModule = require('./yourModule');
console.log(yourModule)

返回的是一个空的对象? ?

// yourModule.js?? ?
exports = {a : 1 };

//index.js
const yourModule = require('./yourModule');
console.log(yourModule)

返回的也是一个空的对象

5. 模块作用域

? ? ?1. 定义:和函数作用域类似,在自定义模块中定义的变量,方法等成员,只能在当前模块内被访问,叫做模块作用域

? ? ?2.好处:防止了全局变量的污染的问题

? ? ?3. 例子:变量污染,一个html,引入两个js文件导入 一个js,导入两个js文件

6..module对象

1.概念:

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

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

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

module.exports 默认指向的是一个空的对象。

2.注意点:

使用require()方法导入模块时,导入的结果,永远以module.exports指向的对象为准 ?

?

3.exports对象

?概念: exports和module.exports 指向的是同一个对象

? ?注意点:? ? require()模块最终的指向是module.exports

? ? ? ? ? ? ? ? ? ?为了防止混乱,建议大家不要在同一个模块中使用exports 和 module.exports

? ? ? ? ? ? ? ? ? ? module.exports 使用的比较多 一般情况下, 使用 exports 看懂别人的代码?

7.CommonJS规定:

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

CommonJS规定:

1.每个模块内部,module变量代表当前模块的module.exports属性,require()方法用于加载模块

2.module变量是一个对象,它的exports属性(即module.exports)是对外的接口

3.加载某个模块,其实是加载该模块的module.exports

8.关于包

1.定义:Node.js中的第三方模块又叫包

2.包是由第三方个人或团队开发出来的,免费供所有人使用

3.为什么需要包?

由于Node.js的内置模块提供了一些底层的APi,导致在基于内置模块进行项目开发时

包是基于内置模块封装出来的,极大地提高了开发效率

4.包的搜索和下载

搜索包:

?下载包:

? npm -v 查看自己电脑上的所安装npm的版本号

5.在项目中的安装包

语法:

1.npm install 包的完整名称 简写 npm i 完整的名称?

列如: npm i moment

2.案例

// 1.导入需要的包
const moment = require('moment')
const dt = moment().format('YYYY-MM-DD HH:mm:ss');
console.log(dt); (网站不在维护)

const moment = require('dayjs')
const dt = moment().format('YYYY-MM-DD HH:mm:ss');
console.log(dt)的使用;(dayjs)

6.下载指定版本的包

语法: npm i moment @ 版本号

第1位数字:大版本

第2位数字:功能版本

第3位数字:Bug修复版本

版本号提示的规则: 只要前面的版本号增长了,则后面的版本号归零

7.安装包 ,删除包

? 1.安装指定文件的包

? npm i 包的名字

?2. 安装所有的包

? ? npm i

3.删除包

  1. 命令:npm uninstall 命令来卸载指定的包

  2. npm uninstall命令执行完成后,会把卸载的包,自动从package.json的dependencies中 移除掉。

    3.devDependencies 在项目开发阶段会用到,在项目上线不会用到

格式: npm i 包名 -D

9.node_modules的文件夹 和package-lock.json的配置文件

?作用:

node_modules的文件夹 用来存放所有安装到项目中的包,require()导入第三方包时,就是从这个目录中查找并加载包

package-lock.json 配置文件用来记录 node_modules目录的每一个包的下载信息,列如包的名字,版本号,下载地址

????????

?

10.包管理配置文件(package.json)

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

今后在项目开发中,一定要把node _modules 文件夹,添加到.gitgnore 忽去文件

npm init -y 可以在项目中创建一个package.json文件

1.注意事项 路径不能包含中文和空格

2.npm init -y默认所有的选项 ,可以进行修改 (没有加y需要一个个进行配置)

3.dependcies节点

11.如何解决下载包慢的问题

淘宝NPM镜像服务器

1.每隔一段时间,自动把npm 官方服务器的包同步到国内

官方服务器的包同步到国内

  1. 下包的镜像源,指的就是下包的服务器地址

    指令

    查看当前的下包镜像源

    npm config ger registrt

    2.将下包的镜像源切换为淘宝镜像源

    npm config ger set registrt=http://registry.npm.taobao.org/

    检查镜像源是否下载成功

    npm config get registry

?

为了更方便的切换下包的镜像源,可以安装nrm这个小工具,利用nrm提供的终端命令,可以快速查看和切换下包的镜像源

通过npm包管理器,将nrm安装为全局可用的工具

npm i nrm -g

查看所有可用的镜像源

nrm ls

将下包的镜像源切换为taobao 镜像

nrm use taobao

? ? ? ?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:45:45  更:2021-10-07 13:48:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:33:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码