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实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经