【Vue】Re08 模块化
一、JS的演变:
1、简单的页面控制,改变HTML标签和CSS样式
2、AJAX异步请求,控制前后数据传输问题
3、更强大的功能,几乎依赖JS实现
工程管理问题:
简单页面只需要在页面嵌入script标签里面写JS即可完成业务功能的实现
继续向下复杂,JS不得不需要独立出来放入文件中加载实现
JS文件与日剧增,文件也不好管理,引申出模块化概念
实际上倒不如说是为了多人开发的解决方案
二、变量冲突问题
演示案例:
这里引入了三个JS文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript" src="devA.js"></script>
<script type="text/javascript" src="devB.js"></script>
<script type="text/javascript" src="devC.js"></script>
</body>
</html>
A文件:
// devA
var name = 'devA-name'
var age = 100 function sum(n1, n2) {
return n1 + n2;
} var flag = true; if (flag) {
console.log(sum(100,8));
}
B文件:
// devB
var name = 'devB-name'
var age = 23 function sum(n1, n2) {
return n1 + n2;
} var flag = false; if (flag) {
console.log(sum(20,8));
}
C文件引用这个变量进行判断
if (flag) {
console.log('flag is true');
}
打印结果:

三、演变与CommonJS
解决上述冲突的方案
var moduleA = (function() { /* 3、 利用这个匿名函数将对象赋值给变量ModuleA */
// devA
var name = 'devA-name'
var age = 100
function sum(n1, n2) {
return n1 + n2;
}
var flag = true;
if (flag) {
console.log(sum(100,8));
}
/* 1、 利用JS对象把上述的属性和函数装载 */
var object = {};
object.flag = flag;
object.sum = sum;
console.log(object);
return object; // 2、 把这个对象用匿名函数返回
})();
/* 这样全局对象就存放了一个moduleA变量 */
devC文件调用时这样编写:
if (moduleA.flag) {
console.log('flag is true');
}
我们模块化之后只需要保证模块对象的变量名称不发生冲突且规范即可
上述的解决方案体现出了模块化的核心概念:
那就是导入和导出【Import & Export】
常见的模块化规范:
CommonJS
AMD
CMD
ES6 Modules
1、CommonJS
规范使用语法:
CommonJSexport.js 导出
module.exports = {
flag : true,
sum : function () {
// todo ...
},
}
module.exports是不存在的变量,所以需要API支持
CommonJSimport.js 导入:
【支持.js后缀省略】
let { flag, sum } = require('./CommonJSexport');
上面的写法时使用解构函数
当然还是使用变量引用的方式舒服些
let customModule = require('./CommonJSexport');
四、ES6的模块化导入和导出
导出的JS文件:
var foo = 100;
var bar = function () {
// todo....
console.log('sss');
} /* 将此JS的变量导出 */
export {
foo, bar
}
导入的JS文件:
import { foo, bar } from './exportJavaScriptFile.js';
console.log(foo);
bar();
index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="module" src="./exportJavaScriptFile.js"></script>
<script type="module" src="./importJavaScriptFile.js"></script>
</head>
<body>
</body>
</html>
注意上面的script标签一定要使用type属性标注module
否则关键字export和import都无效,浏览器无法解析识别
导出的语法:
/* 将此JS的变量导出 */
export {
foo, bar
} /* 导出方式二 */
export var varA = 100; /* 导出函数 */
export function fun1() {
// todo ...
return 100;
} /* 导出JS类 */
export class JsClass {
aaa;
bbb;
fun1() { }
fun2() { }
}
上述的导出在导入时必须使用解构函数,也就是在括号中调用变量名称即可
但是如果是使用导入的类的话,就需要这样使用了。。。
import { JsClass } from './exportJavaScriptFile.js';
let jsClass = new JsClass();
jsClass.aaa = 111;
// todo ....
当然我们也希望直接以对象的方式引用出来
可以这样:
// import { foo, bar } from './exportJavaScriptFile.js';
import * as aaa from './exportJavaScriptFile.js';
console.log(aaa.foo);
console.log(aaa.bar());
五、Export Default使用
我们不希望把导出的东西进行命名,命名的规则留给导入此模块的调用者去命名
所以有了export default
在上面的案例我们都发现,export之后,导入进来调用的使用者必须按照指定变量名称使用
如果调用者不知道变量名称将是个头疼的事情
但是要注意,export default只允许使用一次。
let foo = 213;
let bar = function (n1, n2) {
return n1 * n2;
} export default {
foo, bar
}
导入时:
可以自行定义导入模块的变量名称了
import mmm from './defaultExport';
console.log(mmm.foo);
console.log(mmm.bar(213, 332));
【Vue】Re08 模块化的更多相关文章
- Vue 路由模块化配置
博客地址:https://ainyi.com/77 企业运营后台页面很多,路由如若不区分模块化配置,所有路由挤在同一个文件将不好维护,所以路由的配置也要模块化 分享两个解决方案 -- Vue 路由配置 ...
- Vue路由模块化的实现方法
分享一个Vue路由模块化方法,简单实用,好用到飞起 路由模块化 1.router/index.js 配置路由 import Vue from 'vue' import VueRouter from ' ...
- 利用requirejs实现vue的模块化开发
通常vue都是搭配webpack+vue-cli使用的 如果不在nodejs环境下开发web应用呢? 这里提出一个解决方案: 1.加载requirejs,并且指定main函数 <script d ...
- webpack+vue+vueRouter模块化构建完整项目实例详细步骤-入门篇
新建项目 开始(确认已经安装node环境和npm包管理工具) 1.新建项目文件名为start_vuedemo 2.npm init -y 初始化项目,我的win7系统,工程在d盘的vue_test_p ...
- webpack+vue+vueRouter模块化构建小demo实例超详细步骤(附截图、代码、入门篇)
说明:本demo使用yarn代替npm指令来下载一系列依赖,有详细指令说明:使用WebStorm下Terminal来输入指令: >开始(确认已经安装node环境和yarn包管理工具) 1.新建项 ...
- vue css 模块化编程 CSS Modules Scoped
1.scoped https://vue-loader.vuejs.org/zh/guide/scoped-css.html 2.module https://vue-loader.vuejs.org ...
- .Net Core与Vue.js模块化前后端分离快速开发解决方案(NetModular)
NetModular是什么? NetModular不仅仅是一个框架,它也是一整套的模块化与前后端分离的快速开发的解决方案,目标是致力于开箱即用,让开发人员完全专注于业务开发,不需要关心底层封装和实现. ...
- .Net Core+Vue.js模块化前后端分离快速开发框架NetModular更新日志(2019-12-08)
源码 GitHub:https://github.com/iamoldli/NetModular 码云:https://gitee.com/laoli/NetModular 欢迎star~ 文档 ht ...
- vue 路由模块化
第一. 在 router 文件夹下 新建个个模块的文件夹,存放对应的路由js文件 如图1: 第二.修改router文件夹下的index.js 如图2 三.在main.js 修改如下代码 图3
- vue中模块化后mapState的使用
代码如下: 相当于声明了一个变量name,然后以state入参取得其modules文件夹中user文件里的name属性.因为在模块(如user)中,在抛出时的export default中添加了一句: ...
随机推荐
- vant做城市列表
vant: https://youzan.github.io/vant/#/zh-CN/ 安装 cnpm i -S vant 按需加载配置 # 在 babel.config.js 中配置 module ...
- 自动化搭建专属 AI 绘图服务
通义万相AIGC技术已经比较成熟,结合阿里云的计算和存储产品可以方便的搭建自己专属的 AI 绘图服务.例如<创意加速器:AI 绘画创作>这个解决方案,利用阿里自研的通义万相AIGC技术在 ...
- CF1838A-Blackboard-List
题意简述 在黑板上有两个数字,进行如下操作 \(n-2\) 次: 每次在黑板上选择任意两个数,将两个数的差的绝对值写在黑板上. 这样你会得到一个长度为 \(n (3 \le n \le 100)\) ...
- 项目管理--PMBOK 读书笔记(13)【项目相关方管理】
1.相关方分矩阵 工具与技术 核查表 又叫检查表,计数表,收集属性数据,解决问题. 焦点小组&访谈: 特点:慢,焦点小组是一对多,访谈时多对多. 抽样统计&控制图: 控制图反应 ...
- OceanBase 金融项目优化案例
领导让我帮忙支持下其他项目的SQL优化工作,呦西,是收集案例的好时机. 下面SQL都是在不能远程的情况下,按照原SQL的逻辑等价改写完成否发给现场同事验证. 案例一 慢SQL,4.32秒: SELEC ...
- Java原子操作保证方案
引言 原子操作是指不会被线程调度机制打断的操作:这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程).通常所说的原子操作包括对非long和double ...
- python globals()[]将字符串转化类,并通过反射执行方法
背景: 通过关键字设计ui自动化框架,将测试用例及其步骤存放到excel文件:其中步骤中包含了封装好的关键字方法,如打开浏览器.输入页面操作等,关键字保存的内容:具体类实例.方法 通过excel获取到 ...
- Caffe样例中mnist的文件之间逻辑分析
约定一下,Caffe运行样例时在终端中使用的所有命令,同时终端中的目录已经cd到Caffe之中(别告诉我一个Github项目你还没有make all就直接拿过来用了) sudo sh data/mni ...
- Nuxt3 的生命周期和钩子函数(一)
title: Nuxt3 的生命周期和钩子函数(一) date: 2024/6/25 updated: 2024/6/25 author: cmdragon excerpt: 摘要:本文是关于Nuxt ...
- .NET项目中使用HtmlSanitizer防止XSS攻击
.NET项目中使用HtmlSanitizer防止XSS攻击 前言 最近博客也是上线了留言板功能,但是没有做审核(太懒了),然后在留言的时候可以输入<script>alert('xss')& ...