一、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 模块化的更多相关文章

  1. Vue 路由模块化配置

    博客地址:https://ainyi.com/77 企业运营后台页面很多,路由如若不区分模块化配置,所有路由挤在同一个文件将不好维护,所以路由的配置也要模块化 分享两个解决方案 -- Vue 路由配置 ...

  2. Vue路由模块化的实现方法

    分享一个Vue路由模块化方法,简单实用,好用到飞起 路由模块化 1.router/index.js 配置路由 import Vue from 'vue' import VueRouter from ' ...

  3. 利用requirejs实现vue的模块化开发

    通常vue都是搭配webpack+vue-cli使用的 如果不在nodejs环境下开发web应用呢? 这里提出一个解决方案: 1.加载requirejs,并且指定main函数 <script d ...

  4. webpack+vue+vueRouter模块化构建完整项目实例详细步骤-入门篇

    新建项目 开始(确认已经安装node环境和npm包管理工具) 1.新建项目文件名为start_vuedemo 2.npm init -y 初始化项目,我的win7系统,工程在d盘的vue_test_p ...

  5. webpack+vue+vueRouter模块化构建小demo实例超详细步骤(附截图、代码、入门篇)

    说明:本demo使用yarn代替npm指令来下载一系列依赖,有详细指令说明:使用WebStorm下Terminal来输入指令: >开始(确认已经安装node环境和yarn包管理工具) 1.新建项 ...

  6. vue css 模块化编程 CSS Modules Scoped

    1.scoped https://vue-loader.vuejs.org/zh/guide/scoped-css.html 2.module https://vue-loader.vuejs.org ...

  7. .Net Core与Vue.js模块化前后端分离快速开发解决方案(NetModular)

    NetModular是什么? NetModular不仅仅是一个框架,它也是一整套的模块化与前后端分离的快速开发的解决方案,目标是致力于开箱即用,让开发人员完全专注于业务开发,不需要关心底层封装和实现. ...

  8. .Net Core+Vue.js模块化前后端分离快速开发框架NetModular更新日志(2019-12-08)

    源码 GitHub:https://github.com/iamoldli/NetModular 码云:https://gitee.com/laoli/NetModular 欢迎star~ 文档 ht ...

  9. vue 路由模块化

    第一. 在 router 文件夹下 新建个个模块的文件夹,存放对应的路由js文件 如图1: 第二.修改router文件夹下的index.js  如图2 三.在main.js 修改如下代码 图3

  10. vue中模块化后mapState的使用

    代码如下: 相当于声明了一个变量name,然后以state入参取得其modules文件夹中user文件里的name属性.因为在模块(如user)中,在抛出时的export default中添加了一句: ...

随机推荐

  1. 使用 ClickHouse 做日志分析

    原作:Monika Singh & Pradeep Chhetri 这是我们在 Monitorama 2022 上发表的演讲的改编稿.您可以在此处找到包含演讲者笔记的幻灯片和此处的视频. 当 ...

  2. (三)xpath爬取4K高清美女壁纸

    功能:通过xpath爬取彼岸图网的高清美女壁纸 url = 'http://pic.netbian.com/4kmeinv/' 1. 通过url请求整张页面的数据 2.通过页面的标签定位图片所在的位置 ...

  3. js获取指定日期的前一天/后一天

    date代表指定日期,格式:2018-09-27 day代表天数,-1代表前一天,1代表后一天 // date 代表指定的日期,格式:2018-09-27// day 传-1表始前一天,传1表始后一天 ...

  4. window10 java环境变量配置

    window10 此电脑 右击属性 相关设置 高级系统配置 点击右下的 环境变量 在系统变量中新增JAVA_HOME=D:\Program Files\Java\jdk1.8.0_25 在系统变量中修 ...

  5. 实验9.单臂路由实现Vlan互通实验

    # 单臂路由实现Vlan互通实验 本实验用于测试单臂路由方式实现Vlan路由. 实验组 实验过程 SW int g0/0/1 port link-type access port default vl ...

  6. .NET Core MVC基础之页面传值方式📃

    .NET Core MVC基础之页面传值方式 前言 最近工作太忙了,浅浅更新一下.NET基础知识.大部分面试官都会问.NET页面传值的几种方式,那么接下来就来细讲与实现一下吧! 页面传值分成两类 第一 ...

  7. 生成数字csv

    csv文件: import time import mcpi.minecraft as minecraft import mcpi.block as block mc = minecraft.Mine ...

  8. 深度对比!瑞芯微RK3562J比RK3568J好在哪里?

    作为瑞芯微的明星产品--RK3568J,凭借其出色的性能及丰富的外设接口成为国内众多工业客户的最佳选择. 随着RK3568J的大规模应用,很多客户开始针对RK3568J的价格偏高.功耗偏高等问题提出了 ...

  9. 嵌入式基础测试手册——基于NXP iMX6ULL开发板(3)

    基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成.核心板经过专业的PCB Layout ...

  10. 嵌入式知识分享——GDB程序调试方法说明

    前  言 本指导文档适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit Linux开发环境:Ubuntu 18.04.4 64bit 虚拟机:VM ...