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

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决