nodejs快速入门(一)-模块化开发

2024-08-31 01:08

本文主要是介绍nodejs快速入门(一)-模块化开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    随着网站开发的复杂度越来越高,js代码和js文件的增多,出现了开发者头疼的两个问题:① 命名冲突;②文件依赖。

js模块化开发可以解决这些问题。

   ①变量命令冲突

        在js文件中,如下创建一个变量并赋予一个函数。如果文件的代码过多,在后续的代码中再次使用add变量,就会将原来的add变量覆盖,就造成了变量的命名冲突。

var add=function(v1,v2){return v1+v2;
}// 此处省略一万行代码var add = 123;

    我们逐渐试着重代码进行改善

    (1)对象封装 

var calculator={num:123;
}
calculator.add=function(v1,v2){return v1+v2;
}

    这时候 add的作用范围在caculator对象中,就不会避免后续代码直接写 var add = value 造成变量命名冲入。但是这样的代码还是有很大的局限性,对象里面的属性和方法很容易被修改掉,很不安全。

    (2)划分私有命名空间

var calculator=(function(){var num=123;var add=function(v1,v2){return v1+v2;};return {num:num,add:add}
})()

    通过匿名函数,闭包将add的私有化到calculator中,可以保护好里面的属性和方法,但是这种方式的局限在于不能维护和扩展功能。

    (3)开闭原则-维护扩展

var calculator=(function(){var num=123;var add=function(v1,v2){return v1+v2;};return {num:num,add:add}
})();var calculator=(function(global){global.mod=function(v1,v2){return v1%v2;}return global;
})(window.calculator||{});

    对add的修改关闭了,同时提供了对calculator的功能扩展,window.caucluator传递就是为了打破封装性。

②文件依赖

        在开发js代码的过程中,例如使用了jquery.js,就需要通过<script src="./jquery.js"></script>的形式引入文件,形成硬编码。如以下代码

var calculator=(function(){var num=123;var add=function(v1,v2){return v1+v2;};return {num:num,add:add}
})();var calculator=(function(global){global.mod=function(v1,v2){return $(v1) % $(v2); // 这里使用了jquery的$}return global;
})(window.calculator||{});

根据以上问题,引入模块化开发

模块化规范

       ①服务器端规范

               

                nodejs就是遵循了CommonJS规范。

        ②浏览器端规范

                

                   RequireJS遵循AMD规范。

                    

                    SeaJS遵循CMD规范。


这里先介绍SeaJS Demo

    index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>SeaJS Demo</title><script type="text/javascript" src="./modules/seajs/2.2.0/sea.js"></script>
</head>
<body>
<input type="" name="" value="1" id="v1">
<input type="" name="" value="2" id="v2"></body><script type="text/javascript">seajs.use('./modules/calculator',function(cal){ // 参数1:引入模块路径;参数2:回调函数console.log(cal.add2());});</script>
</html>

在index.js的同级目录modules中,创建如下文件

    calculator.js

define(function(require,exports,module) {var operator = require('./add');exports.add=operator.add;exports.add2=operator.add2;
});

    add.js

define(function(require,exports,module) {var add=function(v1,v2){return v1+v2;}$=require('./jquery.js');var add2=function(){var v1= $('#v1').val();var v2= $('#v2').val();return (v1-0)+(v2-0);}exports.add=add;exports.add2=add2;
});

 文件目录

    (1)define是SeaJS的全局函数,定义模块。

    (2)modules是一个全局变量相当于 浏览器解析dom 的window对象。

    (3)exports是modules.exports的属性对象别名;不能直接给exports赋值,暴露单个属性和方法直接给module.exports赋值。exports提供多个属性和方法向外暴露。

    (4)seajs.user()函数启动模块;

    (5)require() 用于加载模块。

        模块化开发保证了复合“单一职责”设计,通过匿名函数的注入,保证了模块的独立性,而且也能清晰的表达模块之间的依赖。这里简单介绍SeaJS,如果需要知道更多,访问http://www.zhangxinxu.com/sp/seajs/ 

这篇关于nodejs快速入门(一)-模块化开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122454

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图