模块化简单来说就是将一个完整的长篇代码文件根据功能进行划分成几个文件,这些文件各自负责一个独立的功能,各个文件组合起来实现一个完整的大功能,这就是模块化,每个负责独立功能的文件就是模块。
由于一开始JavaScript是在web页面需要的地方提供一定交互,所以一般不需要多大的脚本。但随着JavaScript脚本的复杂化,最新的浏览器已经开始原生支持JavaSript模块功能了。
使用JavaScript 模块依赖于 import 和 export,import 和 export 的浏览器支持程度是最新的浏览器版本都是支持的,但 IE 和旧版本的浏览器不支持,因此若想兼容 IE 和旧版本的浏览器基本就不能使用了。
export 和 import 是成对出现,配合工作的
JS模块化是各种JS框架学习的前提基础
import 和 export 语句用于将一个模块里实现某些功能的变量或函数导入/导出,也可导入/导出类
一个模块只能有一个默认导出,默认导出的变量只能有一个,且不能有大括号{}
语法为export default 变量名
model.js
function Test1(){
console.log("这是默认导出")
}
function Test2(){
console.log('这是命名导出')
}
export default Test1
语法为export {变量名,变量名……}
function Test1(){
console.log("这是默认导出")
}
function Test2(){
console.log('这是命名导出')
}
export {Test1, Test2}
main.js
import Test1 from "./model.js"
Test1()
main.js
import x from "./model.js"//x就是默认导出的Test1
x()
main.js
import {Test1, Test2} from "./model.js"
Test1();
Test2();
as关键字跟一个新名字实现重命名
main.js
import {Test1 as x1, Test2 as x2} from "./model.js"
x1();
x2();
也可在导出时用as关键字重命名
model.js
function Test1(){
console.log("这是默认导出")
}
function Test2(){
console.log('这是命名导出')
}
export {Test1 as x1, Test2 as x2}
<script src="main.js"></script>
使用对象,在as关键字重命名的基础上进一步简单化
import * as Model from "./model.js"
Model.x1();
Model.x2();
有时候可以将多个子模块组合到一个父模块中,再由父模块决定导出哪个,这个父模块文件就像是个组合各个模块的中转站
语法为export {变量名} from 模块路径
当前目录结构结构
src
index.html
main.js
redirection.js
models
model.js
model2.js
model.js
function Test1(){
console.log("这是子模块1")
}
export {Test1}
model2.js
function Test2(){
console.log('这是子模块2')
}
export {Test2}
redirection.js
export {Test1} from "./models/model.js"
export {Test2} from "./models/model2.js"
main.js
import * as Model from "./redirection.js"
Model.Test1()
Model.Test2()
html
<script src="./main.js"></script>
动态加载模块用于在导入模块时不必预先加载所有模块,可以在需要时使用 import() 作为函数调用,将其参数传递给模块的路径,它返回一个 promise,使用 Promise 对象对模块加载结果操作。
语法为import(动态加载的模块路径)
dynamic.js
function TestDy(){
console.log("这是动态模块")
}
export default TestDy
main.js
document.querySelector('.load').onclick = function(){
import('./dynamic.js').then((Model)=>{
Model.default()
})
}
模块化是指把一个复杂的系统分解到一个一个的模块。模块化开发的优点:代码复用,让我们更方便地进行代码管理、同时也便于后面代码的修改和维护。一个单独的文件就是一个模块,是一个单独的作用域,只向外暴露特定的变量和函数。
CommonJS 是服务器端的模块化方案,nodeJs 就采用了这种方案。在 CommonJS 规范中,一个文件即一个模块,用module.exports和exports定义模块输出的接口,用require加载模块。在 requireJS 中用define定义模块,require载入模块,require.config用来配置路径。ES6 Module 主要使用export输出,import加载。
在很长的一段前端历史里,是不存在打包这个说法的。那个时候页面基本是纯静态的或者服务端输出的, 没有 AJAX,也没有 jQuery。Google 推出 Gmail 的时候(2004 年),XMLHttpRequest, 也就是我们俗称的 AJAX被拾起的时候
AMD 是 RequireJS 给出的模块加载方案。 支持递归依赖解析、模块异步加载,夜兼容 CommonJS 可以在 Node.js 里用。 虽然目前已经不再流行,很多站点更倾向于编写 ES Modules 并直接 Webpack 打包, 但 AMD 是完整的
CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。export通过接口,输出的是同一个值。不同的脚本加载这个接口,得到的都是同样的实例。
本文包含两部分,第一部分通过简明的描述介绍什么是 CommonJS、AMD、CMD、UMD、ES Module 以及它们的常见用法,第二部分则根据实际问题指出在正常的 webpack 构建过程中该如何指定打包配置中的模块化参数。
这篇文章主要介绍了css模块化方案,css的模块化方案可能和js的一样多,下面简单介绍几种主要的模块方案,非常具有实用价值,需要的小伙伴可以参考下。css的模块化方案可能和js的一样多,下面简单介绍几种主要的模块方案
在模块化规范形成之前,JS开发者使用Module设计模式来解决JS全局作用域的污染问题。Module模式最初被定义为一种在传统软件工程中为类提供私有和公有封装的方法。在JavaScript中,Module模式使用匿名函数自调用 (闭包)来封装
众所周知,早期 JavaScript 原生并不支持模块化,直到 2015 年,TC39 发布 ES6,其中有一个规范就是 ES modules(为了方便表述,后面统一简称 ESM)。但是在 ES6 规范提出前,就已经存在了一些模块化方案
CommonJS 模块输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。ES6 Modules 的运行机制与 CommonJS 不一样。JS 引擎对脚本静态分析的时候,遇到模块加载命令import,就会生成一个只读引用。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!