当前位置:网站首页 > Node.js开发 > 正文

Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块

Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块

10. Node中的模块化

10.1 什么是模块化

  • js设计之初只是为了实现表单验证这样的简单功能,没设计模块化方案,所以js天生不支持模块化
  • 不支持模块化简单来说就是在一个js文件内不能引入其他js文件,当然也就谈不上使用其他js文件中的内容
  • 为了让js支持模块化,一些大神自己编写底层库文件,让js开始支持模块化
  • js模块化规范有四种标准: AMD CMD CommonJS ES6
  • Node属于CommonJS标准
  • 使用模块化可以很好的解决变量、函数名冲突问题,也能灵活的解决文件依赖问题
  • 没有模块化,不允许一个js文件引入另外的JS,有了模块化,就允许一个js文件引入其他的js文件

10.2 通过global基本实现模块化

局部作用域(模块的作用域):

  • 一个js文件就是一个模块
  • 在一个js文件中定义的属性(变量、常量)和方法默认都只能在当前js文件中使用

全局作用域:

  • 在js文件中声明的属性和方法如果都挂载到global对象下;当其他js文件导入该模块后,就能使用该模块下的属性和方法了。

    aa.js

    // 加载bb.js require('./bb.js'); // 加载自己写的js文件, 必须加 ./ // console.log(global.abc); console.log(abc); fn(4, 9); 

    bb.js

    // 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => { 
          console.log(x + y); }; // let console = '123'; // 把变量定义成global的属性 global.abc = abc; global.fn = fn; 

    这个方案可以实现模块化,但是不推荐,因为有可能会污染全局环境

实例-模块化引入-成对出现

1、文件目录

在这里插入图片描述

2、示例

第一组

a.js

// 引入b.js,并且还要使用b.js中定义的变量、函数等 const b = require('./b.js'); console.log(b); // 得到一个空对象 / * 小结: * 虽然可以通过require加载其他的js文件,但是并不能使用其他js文件中定义的变量 */ 

b.js

// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => { 
    console.log(x + y); }; 

效果1-a引入b

在这里插入图片描述

第二组

aa.js

// 加载bb.js require('./bb.js'); // console.log(global.abc); // hello console.log(abc); // hello fn(4, 9); // 13 

bb.js

// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => { 
    console.log(x + y); }; // let console = '123'; // 把变量定义成global的属性 global.abc = abc; global.fn = fn; 

效果2-aa引入bb

在这里插入图片描述

10.3 module.exports导出属性和方法

  • 将变量、对象、函数等挂载到global对象上并不推荐,因为容易造成变量污染。
  • 推荐使用 module.exports 导出模块中定义好的变量、对象、方法等等
  • 使用require加载(导入)模块后,就能使用模块中定义好的变量、对象、方法了

bbb.js – 导出模块

// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => { 
    console.log(x + y); }; // 导出模块 // module.exports = 导出的内容(可以是对象、可以是函数) module.exports = { 
    // 属性: 值 abc: abc, fn: fn } 

aaa.js – 导入模块

// 导入模块 const bbb = require('./bbb.js'); // console.log(bbb); console.log(bbb.abc); // hello bbb.fn(3, 8); // 11 
实例
第三组

aaa.js

// 导入模块 const bbb = require('./bbb.js'); // console.log(bbb); console.log(bbb.abc); // hello bbb.fn(3, 8); // 11 

bbb.js

// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => { 
    console.log(x + y); }; // 导出模块 // module.exports = 导出的内容(可以是对象、可以是函数) module.exports = { 
    // 属性: 值 abc: abc, fn: fn } // 等价于 module.exports = { 
    // 属性: 值 es6中相同可省略 abc,fn } 

效果3-aaa引入bbb

在这里插入图片描述

到此这篇Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • Node学习(八)02-Node中的模块化——用module.exports实现模块化-封装并导出db.js模块之mysql增删改查& 步骤之连服务器、键值照应、封装导出模块、导入模块并打印服务器数据2024-11-28 13:18:06
  • Node学习(九)023-管理系统之添加英雄——文件上传-multer第三方模块之multer简介、multer配置、multer使用 & 使用myupload.single() 方法作为接口的中间件2024-11-28 13:18:06
  • Node学习(九)061-管理系统之登录和注册——md5加密 & 前端注册成功跳转登录页 & 前端登录成功跳转首页 & node服务器之post接口写法2024-11-28 13:18:06
  • Node学习(九)063-会话技术简介之cookie的设置和获取——会话控制的分类之cookie-保存客户端(浏览器)、session-保存服务器 & cookie的设置与获取 & cookie有效期2024-11-28 13:18:06
  • Node学习(九)064-会话技术简介之session的设置和获取——设置与获取之express-session模块& session有效期& 删除session& cookie和session的原理2024-11-28 13:18:06
  • Node学习(五)021-处理静态资源——中间件是express最大特色-app.use() & 有三个基本参数req、res、next & 自定义中间件处理静态资源文件-sendFile异步读取文件2024-11-28 13:18:06
  • Node学习(五)01-express框架——使用express搭建web服务器 & 启动命令之node或nodemon+空格+文件相对路径 __dirname指当前文件所在文件夹的绝对路径2024-11-28 13:18:06
  • Node学习(四)-npm概述——使用npm安装第三方模块之全局安装、本地局部安装2024-11-28 13:18:06
  • node-sass安装不上的问题2024-11-28 13:18:06
  • 使用node自动化创建文件及其模板2024-11-28 13:18:06
  • 全屏图片