【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中添加了一句: ...
随机推荐
- 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
为什么会突然想到写这么一个大杂烩的博文呢,必须要从笔者几年前的一次面试说起 当时的我年轻气盛,在简历上放了自己的博客地址,而面试官应该是翻了我的博客,好几道面试题都是围绕着我的博文来提问 其中一个问题 ...
- linux系统下,安装redis教程,以redis 6.2.6为例
1.下载安装包 手动下载:进入官网选择下载版本https://download.redis.io/releases/ 命令下载: cd /usr/local wget http://download. ...
- 题目:SHMIP The subglacial hydrology model intercomparison Project
SHMIP(冰下水文模型比较计划)是一个致力于解决冰下水文多种理论方法问题的项目.该计划通过构建一系列综合模拟实验,并对运行这些模拟的各参与模型的结果进行比较,以达到其目标.这将有助于潜在的模型用户更 ...
- APOLLO DEV环境列表无法显示解决,重启对应的Apollo服务
APOLLO DEV环境列表无法显示解决,重启对应的Apollo服务 找到项目中的apollo-core jar包中的配置文件,查看dev.meta的服务器配置IP:端口 apollo-env.pro ...
- 浅析Vite本地构建原理
前言 随着Vue3的逐渐普及以及Vite的逐渐成熟,我们有必要来了解一下关于vite的本地构建原理. 对于webpack打包的核心流程是通过分析JS文件中引用关系,通过递归得到整个项目的依赖关系,并且 ...
- 2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest AGHIJM 题解
A. LaIS 设 \(dp_i\) 为到第 i 位的最长的 almost increasing 长度.可以发现,这个 \(dp_i\) 的转移只有从 \(a_j \leq a_i\) 的地方转移过去 ...
- STM32 CubeMX 学习:有关说明
背景 STM32 是我以前学过的,而很久没有整理过的.因为之前学习的时间比较早,再加上各种资料要么不成熟,要么不齐全:再加上自己一开始没有比较完善的学习经验:以至于我的学习并不扎实. 趁着 STM 的 ...
- 洛谷P1057
#include<iostream> #include<utility> using namespace std; typedef long long ll; #define ...
- 薅 AWS 羊毛的船新方式,以 ChatBot 为例
还在担心一年免费服务器到期后该怎么办?(Solo社区 投稿) 网上绝大多数薅 AWS 羊毛的教程都是在教大家如何申请创建一年免费的 VPS,太 OUT 了!就问一个问题,一年到期了那咋办? 其实,除了 ...
- 全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗?
全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗? 摘要: 本文主要介绍了Python中类和对象中的类方法和静态方法,以及类方法和静态方法的定义 ...