课程名称:web前端架构师
课程章节:第12周 第6章
主讲老师:张轩
课程内容:模块化的发展历史
可维护性
可复用性
使用 backbone.js 的方法
<script src="spec/support/jquery.js"></script> <script src="spec/support/underscore.js"></script> <script src="spec/support/backbone.js"></script> <script src="backbone.localStorage.js"></script> <script src="todos.js"></script></script>
IIFE 自执行函数,创建一个封闭的作用域,赋值给一个全局变量,这种方式在之前很常用,比如 jquery就是通过这种方式实现的。
var namesCollection = (function() { // private members var objects = []; // Public Method function addObject(object) { objects.push(object); printMessage(object); } // Private Method function printMessage(object) { console.log("Object successfully added:", object); } // public members, exposed with return statement return { addName: addObject, }; })(); namesCollection.addName('viking')
现在很多库打包的时候也会输出 iife 格式,但书写的的时候会采用 esm 方式,然后通过 webpack、rollup 等打包工具输出各种格式
缺点
nodejs 使用的就是这种格式,但是commonjs采用的是同步加载文件,不适合浏览器使用
const bar = require('./bar') module.exports = function() { }
define(function(require) { // 通过相对路径获取依赖模块 const bar = require('./bar') // 模块产出 return function () { } })
缺点就是需要额外引入其他库
<script type="module" src="/main.js"></script>
// 通过相对路径获取依赖模块 默认.js不可省略,我们使用打包工具帮我们处理就可以省略了 import bar from './bar.js' // 模块产出 export default function () { }
目前绝大多数浏览器都是支持ES Modules
ESM的基本特性
使用打包工具的好处
可以使用es6+新特性。很多浏览器不能直接支持es+新特性的语法,需要使用babel编译后,复制粘贴到代码中。
部署上线需要手动压缩代码。过去上生产环境需要手动将代码压缩后,复制粘贴到文件中,非常容易出错。工程化就无须担心这些会出错。
想要使用Less/Sass/PostCss增强css编程性,但是运行环境不能直接支持。比如写css代码需要写很多浏览器兼容的代码,过去要么手动写兼容代码(开发代码会变多),要么使用编译器编译后复制粘贴到代码中,工程化就无须考虑兼容性问题,提高了编码质量,
无须再担心开发过程跨域问题。开发调试接口有跨域问题,需要将代码发给后端或在本地起一个后端服务才能看到效果,使用工程化代理,就无须担心跨域问题 总之工程化解决了工作过程中很多重复操作的问题,提高了开发效率和编码质量,降低了开发成本。
webpack 我们都比较熟悉,应该是目前使用最多的模块打包工具。
Rollup 设计之初就是面向 ES module ** 的,构建出结构扁平,性能出众**的类库。
ES module 的规则
rollup 从最开始就支持 tree-shaking ,并且打包后的文件没有多余的代码,目前很多库都是使用 rollup 进行打包,比如 vue、react, vite 创建的项目 在生产环境使用的也是 rollup 进行打包