博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack是如何实现前端模块化的
阅读量:6293 次
发布时间:2019-06-22

本文共 1331 字,大约阅读时间需要 4 分钟。

前言

es6 module是js语言原生的模块化方案,但是由于浏览器的兼容问题,需要webpack对我们写好的模块代码进行处理,可以让浏览器识别我们写的模块代码。

因为浏览器端是没有commonJS规范相关的module,exports,require变量,而且该规范是同步加载模块的,所以浏览器端不适用commonJs规范类型的模块化。

webpack通过模拟module,exports,require变量,将我们的模块代码打包成一个文件,让浏览器可以运行我们的模块代码。

那webpack是如何处理我们的模块代码的呢?

import * as _ from 'loadsh';module.exports = {    name: 'jack',    age: 12};复制代码

webpack会将上面的这个模块代码用一个函数包装起来:

function(module, exports, require) { // 包装函数    const _ = require('loadsh');    module.exports = {        name: 'jack',        age: 12    }}复制代码

那最终webpack是怎么将所有模块化代码打包到一个文件中,让浏览器可以运行呢?

(function(modules) { // modules就是我们的模块代码集合,格式类似于{ 'module1': module1对应的模块代码包装函数 }    function require(name) { // webpack模拟的require变量        const module = { exports: {} }; // webpack模拟的module,exports变量        // require的作用就是在执行的时候将事先定义好的module,exports,require变量传入当前模块对应            的包装函数并且运行。        modules[name].call(module, module, module.exports, require);        return module.exports; // module.exports变量被传入包装函数运行之后赋值。    };    require('入口文件');})(    // 参数就是模块代码被包装之后的集合    {        '模块代码1路径': function(module, exports, require) {                            // 代码主体                        },       '模块代码2路径': function(module, exports, require) {                            // 代码主体                        },    })复制代码

这样讲所有模块代码打包到一个文件中,浏览器一次性将所有资源加载到内存中,变向实现了浏览器端的模块化。

转载地址:http://pstta.baihongyu.com/

你可能感兴趣的文章
《MongoDB管理与开发精要》——1.4节本章小结
查看>>
美国防部报告传指联想产品带来网络威胁
查看>>
php实现查询功能
查看>>
IBM拓展云数据分析服务 用户来“做主”
查看>>
迁移到云端的企业数据需注意安全
查看>>
不仅要“打假”,Facebook 还要治理视频直播中的裸露、暴力内容
查看>>
非授权频谱NB-IoT将引发市场格局突变
查看>>
2017全球中国锂电池市场趋势概述
查看>>
雅虎成立特别委员会评估新战略选项
查看>>
从IBM SVF看传统存储改造的三大要点:软件定义、容量与速度
查看>>
监控摄像头使用率不足六成 还需提高维护力
查看>>
《C语言程序设计:问题与求解方法》——1.4节本章习题
查看>>
交互式线上科学期刊Distill上线,Ian Goodfellow表示“学ML就找它”
查看>>
区块链:这项颠覆性技术将如何改变未来
查看>>
新致云产品运营的那些小事
查看>>
分析师洞察:边缘数据中心的UPS系统
查看>>
微软修复20多年的老漏洞:Win95时就存在了
查看>>
58回应“简历数据泄露”:将展开追查并加固安全系统
查看>>
大数据如何重构影视行业产业链
查看>>
MaxCompute(原ODPS) Studio 2.7.0 版本发布,让代码效率更高
查看>>