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如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同