2、node.js中的模块化

目录

1.node.js中模块的分类

2.模块的加载

3 .Node.js 中的模块作用域

3.1什么是模块作用域

3.2向外共享模块作用域中的成员

3.2.1module对象

3.2.2module.exports对象

3.2.3exports 对象

3.2.4exports和module.exports的使用误区

3.3 Node.js 中的模块化规范

4.npm与包

4.1概念

4.2npm初体验

4.3包管理配置文件

4.3.1package.json

4.3.2多人协作问题

4.3.3快速创建package.json

4.3.4dependencies 节点

4.3.5一次性安装所有包

4.3.6devDependencies节点

4.4解决包下载慢问题

4.4.1包下载慢的原因

4.4.2切换npm下包的服务器地址

4.5包的分类

1.node.js中模块的分类

Node.js 中根据模块来源的不同,将模块分为了3大类,分别是:

  1. 内置模块(内置模块是由Node.js 官方提供的,例如fs、path、http等)
  2. 自定义模块(用户创建的每个.js 文件,都是自定义模块)
  3. 第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载)

2.模块的加载

        使用强大的 require()方法,可以加载需要的内置模块用户自定义模块第三方模块进行使用。代码如下:

注意:使用require()方法加载其它模块时,会执行被加载模块中的代码。

// 1加载内置
const fs = require('fs')
// 2加载自定义(可以省略.js的后缀名)
const custom = require('./06m1.js')
console.log(custom)
// 3加载第三方
const thirdPart = require('moment')

3 .Node.js 中的模块作用域

3.1什么是模块作用域

        和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域。

好处:防止的全局变量污染的问题

浏览器中只有函数作用域,没有模块作用域

最终会输出ls 

3.2向外共享模块作用域中的成员

3.2.1module对象

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

3.2.2module.exports对象

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

3.2.3exports 对象

        由于module.exports单词写起来比较复杂,为了简化向外共享成员的代码,Node提供了exports对象。默认情况下,exports和module.exports指向同一个对象。最终共享的结果,还是以module.exports 指向的对象为准。

3.2.4exports和module.exports的使用误区

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

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

3.3 Node.js 中的模块化规范

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

 CommonJS规定:

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

4.npm与包

终端的一些命令:

  1. npm -v查看自己电脑上所安装的npm包管理工具的版本号
  2. npm i /install 包的名称导入所需要的包
  3. npm i /install 包的名称@指定的版本号安装指定版本的包
  4. npm init -y快速创建package.json
  5. npm install/i一次性安装所有包
  6. npm uninstall 包名卸载指定的包
  7. npm i /install 包的名称 -D安装指定包,将包记录到devDependencies节点中

4.1概念

        Node.js 中的第三方模块又叫做包。包是由第三方个人或团队开发出来的,免费供所有人使用。由于Node.js 的内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发的时,效率很低。包是基于内置模块封装出来的,提供了更高级、更方便的APl,极大的提高了开发效率。

        搜索包: https://www.npmjs.com/网站上搜索自己所需要的包

        下载包:https://registry.npmjs.org/服务器上下载自己需要的包

        npm, Inc.公司提供了一个包管理工具,这个包管理工具的名字叫做Node Package Manager (简称npm包管理工具),这个包管理工具随着Node.js的安装包一起被安装到了用户的电脑上。我们可以使用这个包管理工具,从https://reqistry.npmjs.org/服务器把需要的包下载到本地使用。在终端中执行npm -v命令,来查看自己电脑上所安装的npm包管理工具的版本号。

4.2npm初体验

格式化时间的传统做法

  1. 创建格式化时间的自定义模块
  2. 定义格式化时间的方法
  3. 创建补零函数
  4. 从自定义模块中导出格式化时间的函数
  5. 导入格式化时间的自定义模块
  6. 调用格式化时间的函数

 格式化时间的高级做法

  1. 使用npm包管理工具,在项目中安装格式化时间的
  2. 使用require()导入格式化时间的包
  3. 参考moment的官方API文档对时间进行格式化

代码实现:

// 1导入所需要的包 用[npm i moment(包的名称)] 导入之后可以去官方文档中查看具体的教程
const moment = require('moment')

// 使用moment()可以获得当前时间
const time = moment()
console.log(time)
    // 使用format()可以对时间进行对应的格式化
const dt = moment().format('YYYY-MM_DD HH:mm:ss')
console.log(dt)

 初次装包后多了哪些文件

        初次装包完成后,在项目文件夹下多一个叫做node modules 的文件夹(用来存放所有已安装到项目中的包。require()导入第三方包时,就是从这个目录中查找并加载包package-lock.json的配置文件(用来记录node modules目录下的每一个包的下载信息,例如包的名字、版本号、下载地址

4.3包管理配置文件

4.3.1package.json

4.3.2多人协作问题

 遇到的问题:第三方包的体积过大,不方便团队成员之间共亨项目源代码。

4.3.3快速创建package.json

注意: 

  1.  上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格
  2. 运行npm install命令安装包的时候,npm包管理工具会自动把包的名称和版本号,记录到package.json 中。

4.3.4dependencies 节点

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

4.3.5一次性安装所有包

         当我们拿到一个剔除了node modules 的项目之后,需要先把所有的包下载到项目中,才能将项目运行起来。可以运行npm install命令(或npm i)一次性安装所有的依赖包:

4.3.6devDependencies节点

        如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies节点中。与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中。

4.4解决包下载慢问题

4.4.1包下载慢的原因

4.4.2切换npm下包的服务器地址

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

4.5包的分类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Node.js模块化是一种组织和管理代码的方式,它允许将代码拆分成多个模块,使得代码更可维护、可重用和可测试。以下是在Node.js进行模块化的几种常见方式: 1. CommonJS模块化: - 使用`require`函数引入其他模块,例如:`const module = require('./module');` - 使用`module.exports`导出模块的功能,例如:`module.exports = { ... }` 示例: ```javascript // module.js const greeting = 'Hello'; function sayHello(name) { console.log(`${greeting}, ${name}!`); } module.exports = { sayHello }; ``` ```javascript // main.js const module = require('./module'); module.sayHello('John'); ``` 2. ES模块化: - 使用`import`语句引入其他模块,例如:`import module from './module';` - 使用`export`关键字导出模块的功能,例如:`export function greet(name) { ... }` 注意:ES模块化需要在Node.js版本12及以上才能原生支持。 示例: ```javascript // module.mjs const greeting = 'Hello'; function sayHello(name) { console.log(`${greeting}, ${name}!`); } export { sayHello }; ``` ```javascript // main.mjs import { sayHello } from './module.mjs'; sayHello('John'); ``` 3. 第三方模块: - 使用`npm`命令安装第三方模块,例如:`npm install module-name` - 使用`require`或`import`语句引入第三方模块,例如:`const module = require('module-name')`或`import module from 'module-name'` 示例: ```javascript // main.js const express = require('express'); const app = express(); ``` 这些是在Node.js进行模块化的常见方式。你可以根据自己的需求选择适合的模块化方法来组织和管理代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大炮不想学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值