模块,什么是模块,怎么实现模块

您所在的位置:网站首页 java中的模块是什么意思 模块,什么是模块,怎么实现模块

模块,什么是模块,怎么实现模块

2023-07-17 17:57| 来源: 网络整理| 查看: 265

今天和大家简单的聊一聊“模块”,什么是模块呢?

将代码拆分成独立的块,然后再把这些块连接起来可以通过模块模式来实现。这种模式背后的思想很简单:把逻辑分块,各自封装,相互独立,每个块自行决定对外暴露什么,同时自行决定引入执行哪些外部代码。不同的实现和特性让这些基本的概念变得有点复杂,但这个基本的思想是所有JavaScript模块系统的基础。

模块化好处:1.方便维护,代码定位准确 2.内部的变量,相互不影响,方便单个模块功能调试、升级,方便模块间组合、分解 3.方便团队开发,多人协作互不干扰  4.模块可以复用                            缺点       1.系统分层,调用链会很长         2.模块间发送消息会很耗性能

ES6中如何实现模块化开发?

下面就来举2个栗子:

第一个:人类、学生类、教师类   将这三种类封装成一个独立模块                                                  建一个文件夹添加js文件   起个名字叫随便:lei.js

其实下面的例子就和之前class类 的例子差不多,只是单独把它写到js里 封装成了一个独立模块  

最重要的就是 创建完类之后  要 导出封装模块   export{}

//人类 class People{ constructor(name,age,gender){ this.name=name this.age=age this.gender=gender } eat(){ console.log(this.name+'正在用餐') } study(){ console.log(this.name+'正在学习') } reflection(){ console.log(this.name+'正在思考') } } //导出封装模块 export{} export {People} // 学生类 继承父类People class Student extends People{ constructor(name,age,score){ super(name,age,"男") //super() 方法 在子类中 调用父类的构造函数,必须写在子类的最上方 this.score=score+"分考试成绩" } } export {Student} //教师类 class Teacher extends People{ constructor(name,age,teach ){ super(name,age,"男") this.teach =teach } } export {Teacher} //

然后再创建一个js 用来引入对应的模块内容。根据 创建好对应的类  引入对应的模块内容 语法是: import 定义变量  from 模块地址

import {People} from "./lei.js" import {Student} from "./lei.js" import {Teacher} from "./lei.js" //根据学生类 和人类 创建一个学生对象 let s1=new People("拉瓦",24,99) console.log(s1)//Student {name: '拉瓦', age: 22, gender: '男', score: '99分考试成绩'} console.log(s1.name+s1.score)//拉瓦99分考试成绩 s1.eat()//拉瓦正在用餐 s1.reflection()//拉瓦正在思考 let t1=new Teacher("张老师",30,"正在讲课") console.log(t1) console.log(t1.name+t1.teach)//张老师正在讲课

然后创建学生管理系统html   

学生管理系统

解构 引入模块内容后后无法输出 Cannot use import statement outside a module    会报错 因为传统的浏览器:无法解析 模块语句,不兼容。所以只能将原有的ES6模块化语法,转化为 ES5语法。

如何转化成ES5语法?  在这里就要用到一个打包工具了,                                                       webpack打包工具:可以将代码压缩,也可以将代码转化

如何使用?       1.利用node环境,直接进行工具安装    在网站里下载之后 无脑安装就行  内存很小http://nodejs.cn/download/          ,npm 全球的代码开源站,站点国外 下载速度较慢

下载好之后:                                                                                                                                   第一步:安装node环境 ,无脑安装就行! node环境 自带npm管理了工具  第二步:检测安装是否成功:win+r  cmd  输入 node -v 第三步:安装git模拟命令行 下一步!! 右键 git bash here 命令行打开 第四步: 利用node环境安装webpack工具    输入 cnpm install [email protected] -g   -g表示全局安装 ,node环境的任意位置都可以使用 第五步:输入:webpack -v  检测是否安装完成,会显示出来版本 第六步:由于Npm本身下载速度过慢,可以利用淘宝镜像使用国内站点下载 ,cnpm   cnpm -v 以后安装模块的过程中 ,npm改为 cnpm (这一步可以省去,尽量安装上面的  多等会就多等会吧)    下载中有疑问的可以私我。

如何使用webpack? 将ES6新的代码转化成ES5的代码 第一步:在项目的根路径下,创建一个名字为webpack.config.js的配置文件 名称不可改              

然后:将配置项 作为模块导出  怎么导出? 第一步 entry:入口文件 ,要打包谁? 打包主文件 第二步 output:出口文件,打包后的文件放在什么位置 absolute path output: path属性 必须是绝对路径 node提供 path模块

const path=require("path")//把路径模块引入进来 module.exports = { entry: "./js/index2.js",// 同级目录前方必须 加上./ output: { //改成绝对路径 //path属性存放路径,指定文件夹名称 //path.resolve(__dirname,"") //找到当前文件所在的绝对路径 path: path.resolve(__dirname,"aaa"), filename:"zsj.js" //打包后的文件名称 } }

然后win+r  cmd  输入webpack

 然后在文件夹aaa里会出现打包后的zsj.js文件  然后再输出学生管理系统就ok了

学生管理系统

第二个栗子:

其实第二个栗子和第一个差不多 ,也就是之前我在class类里举例的实现左右手换牌的操作  只要那部分理解了,这个跟着第一个例子的思路走 也很简单,我直接上代码了。

先创建一个用户对象把抓牌方法什么的都放里边  也可以分开, 然后封装js模块  

class User{     constructor(name) {         this.name=name         this.leftHand=null         this.rightHand=null     }     // 第二步抓牌方法     grab(){         // 抓两张牌 分别赋值给左手和右手  牌的花色和大小         var c1=new Card()         this.leftHand=c1.color+c1.size         var c2=new Card()         while(true){             //如果相等c2重新赋值             if(c1.color+c1.size==c2.color+c2.size){                 c2=new Card()             }else{                 break//如果不相等就停止循环             }         }         this.rightHand=c2.color+c2.size     }     //第三步展示牌     show(){         console.log("左手"+this.leftHand+";右手"+this.rightHand)     }     //第四步交换牌     change(){         var t=this.leftHand         this.leftHand=this.rightHand         this.rightHand=t     } } export{User} // 最后在创建一个牌的构造函数 花色及大小随机 class Card{     constructor(){         var colors=["黑桃","红桃","梅花","方片"]         var sizes=["A","2","3","4","5","6","7","8","9","10","J","Q","K"]         //根据下标产生随机数 0-3的随机数         this.color=colors[parseInt(Math.random()*colors.length)]         this.size=sizes[parseInt(Math.random()*sizes.length)]     } } export{Card}

再创建一个js来引入对应的模块内容

import{User}from"./mk.js" import{Card}from"./mk.js" //然后创建对象并输出 var u1=new User('赌神') //展示牌 u1.show()//左手null;右手null //抓牌 u1.grab() //展示牌 u1.show()//左手梅花10;右手红桃7 //两手换牌 u1.change() //展示 u1.show()//左手红桃7;右手梅花10 console.log(u1.name)//赌神

然后 再创建一个名字为webpack.config.js的配置文件 名称不可改   

const path=require("path") module.exports={ entry:"./js/co.js", output:{ path:path.resolve(__dirname,"bbb"), filename:"jj.js"//打包后的文件名 } }

(然后win+r  cmd  输入webpack)!!!!!!!!!注意!!!这一步最重要  之前我都忘了  然后报错了               然后建个HTML直接把通过webpack建的文件拿过来就行了

交换牌 上面 讲到了Node  那么什么是Node呢?

Node是用来开发服务器的,Node.js 不是JS文件也不是一个JS框架,而是一个Server side JavaScript runtime(服务端的一个JS运行时),我们可以Node环境中运行JS代码 。

它可以用来做什么?

开发web应用程序:1. 做动态网站    2. 开发提供数据的服务端API。                                             下面 我们就来实现一下用Node开发服务器:首先第一步启动服务器,编写api接口 。然后第二步跟数据库进行交互  增删改查,也可以操作静态文件,然后再返回 前端,先给大家看个图吧  简单理解一下下

好了  下面直接上代码:

首先引入一个http模块用于启动服务器,通过http模块创建一个服务.createServer(function(){})创建服务

简写req=requset 意思是前端发送过来的参数;简写res=response 意思是返回给前端的内容

const http = require("http") const server = http.createServer((req, res) => { //function 当有人请求服务器时,自动进入回调函数 //利用res参数 给前端返回任意类型内容 res.write("welcome") //.end()发送内容 res.end() }) server.listen(5688)//创建一个端口号 当前电脑就是本地服务器 在本地服务器开辟5688端口作为本次node服务

(然后win+r打开服务器  cmd  输入   node 2.启动服务器.js   +回车键)然后再在浏览器的地址栏输入localhost:5688    页面就会出现welcome。浏览器的地址栏:就是一个ajax请求  get请求 

完成后ctrl+c 终止服务器

然后呢上面的理解后就先放下,下面我再讲一个功能,就是用Node操作静态文件。

创建一个js文件,名为(3.node操作静态文件.js)

操作静态文件的话就要用到fs模块,利用fs写入内容,创建一个名为a.txt空文件然后在刚才创建的js文件里创建下面的代码fs模块:

const fs = require("fs") fs.writeFile("./a.txt", "你好", err => { if (err) { console.log("写入失败") } else { console.log('写入成功') } })

 看上面的代码,fs.writeFile(路径,写入内容,回调函数),然后回调函数里面的err参数的作用是保存错误信息,如果没有错误 err就是空值。

然后win+r打开服务器  cmd  输入   node 2.node操作静态文件.js   +回车键 会像下面的图一样显示写入成功  那么就大功告成了  

 现在在打开名为a.txt的文件里面会有  你好  内容

下面用node读取文件也是一样的道理

 fs.readFile(路径,回调函数) err :如果读取错误 err保存错误信息,没有错误空。data:读取到内容

fs.readFile("./a.txt", (err, data) => { if (err) { console.log("读取失败") } else { console.log(data)// console.log(data.toString())//强行转化成字符串 } })

上面输出的那段乱码是啥意思?那不是乱码       是叫做 Buffer数据类型   二进制码  用来计算机之间进行文件传输时使用的内容。如果实在不想看乱码,就强行转化成字符串就行了。

好了下面开始讲解如何在服务器端打开网页页面   这是个重点!!!!

如何在服务器端打开网页 前端进行数据交互时,通常使用ajax进行数据交互,ajax本身存在同源策略问题 网页必须在服务器端打开 才能使用ajax

上代码呜呜呜, 记得创建文件 名为(188.js)  然后win+r打开服务器  cmd  输入   node 188.js   +回车键    最后再打开浏览器  在浏览器的地址栏输出 http://localhost:8088/a.html     然后 就大功告成了。   

const http = require("http") const fs=require("fs") const server = http.createServer((req, res) => { //根据请求地址 ,来打开对应的网页 // http://localhost:8088/a.html let url=req.url //请求的地址 if (url == "/a.html") { //打开a页面 //读取指定的静态文件 就需要用到fs 所以用fs读取/a.html 然后再返回给前端 fs.readFile("./a.html", (err, data) => { if (err) { res.write("没有找到对应页面") res.end() } else { res.write(data) res.end() } }) } }) server.listen(8088)

好了今天就到这   I went to rest       下次见!!!!     累死..............................................



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3