webpack 第二弹 (原理)

webpack原理

基础+使用

1.webpack是啥

webpack是一个js文件打包器,在处理应用程序时,会将程序用到的静态文件构建成一个依赖关系图 并把他们打包成一个或多个 bundle.js

2 webpack 包含: 入口 (entry),出口 (output) ,loader, 插件(plugins)

(1) entry :定义依赖图的 开始
配置:(webpack.config.js)

moudle.export={
    entry:""//路径+文件名

}

(2) 出口:outputb 规定 webpack创建 bundle.js的路径

配置:


moudle.export={

entry:"",
output:{
        path:"" //最终bundle.js 生成的文件路径,
        filename:""  //编译完成后生成的文件名 默认为 bundle.js
    }
}

(3) loader 让js文件可以加载其他文件类型(支持所有文件类型)

配置时有两个参数

text 指明是哪个类型的文件

use 指明使用哪个loader

webpack 常用的loader:

样式:style-loader、css-loader、less-loader、sass-loader等

文件:raw-loader、file-loader 、url-loader等

编译:babel-loader、coffee-loader 、ts-loader等

校验测试:mocha-loader、jshint-loader 、eslint-loader等

配置(webpack.config.js):

moudle.export={

    entry:"",
    output:{
        path:"",
        filename:""
    },
    loader:{
        text:""// 文件类型的正则,
        use:""// 指定 使用的loader
    }   

}

(4) Plugins: 用来处理各种功能

配置: 在webpack.config.js中


1.require所要用的模块

2.在plugin数组中实例化
const HtmlWebpackPlugin=require("")  //引入模块
moudle.export={
        entry:"",
    output:{
        path:"",
        filename:""
    },
    loader:{
        text:""// 文件类型的正则,
        use:""// 指定 使用的loader
    }
    plugins:[
        new HtmlWebpackPlugin(...参数)
    ]
}

webpack原理2

1.webpack功能:

(1) 代码转换 typescript编译成js sass,less,scss 编译成css

(2) 文件优化 引入的图片,js等各种文件压缩

(3)代码分割 提取公共代码 提高首屏加载速度

(4) 模块合并 合并构建功能相似的模块代码

(5) 自动刷新 配置 webpack 热更新后可以保存代码 页面自动刷新

(6) 代码检验 检验代码是否符合 标准

(7) 自动发布 更新完代码后,可以自动构建出上线版本并传输给发布系统

2.webpack构建流程

(1) 初始化参数 从shell和配置文件中 合并参数 得到最终的参数

(2) 开始编译 通过得到的参数初始化complier对象,加载所有插件,通过run 方式编译
complier 是webpack的实体(tapable 的实例)complier能创建 compliation对象
compoliation执行完后 将最终结果返回给complier

(3) 确定入口文件 根据webpack.config.js/package.json 找到入口文件

(4) 编译模块 从入口文件开始,递归调用所有loader把模块翻译成compliation 递归所有依赖模块,然后重复编译
最终得到 每个模块的最终内容以及他们之间的依赖关系

引入各种模块

(5)输出资源 根据入口文件和各种moudle的关系。生成一个个包含模块的chunk, 然后将chunk转换成一个单独的文件加入输出列表

chunk : webpack 通过引用关系逐个打包模块,这些模块就生成了一个 chunk
chunk 生成的三种情况
1.entry 入口文件
2.异步加载模块
3.代码分割
(6) 确定好输出内容后,根据配置的出口文件和内容,将文件输出到指定的文件上

3.script 标签:


dev 开发版本的配置主要侧重在hot-reload上面,提升开发效率。

production 线上版本,主要侧重在 js, css 压缩

test 目前没有配置 但是主要是单元测试和集成测试。

原文地址:https://www.cnblogs.com/xiran/p/11978355.html

时间: 2024-08-13 14:16:37

webpack 第二弹 (原理)的相关文章

typecho流程原理和插件机制浅析(第二弹)

typecho流程原理和插件机制浅析(第二弹) 兜兜 393 2014年04月02日 发布 推荐 1 推荐 收藏 14 收藏,3.7k 浏览 上一次说了 Typecho 大致的流程,今天简单说一下插件机制和插件的编写方法. 还是先上index.php if ([email protected]include_once 'config.inc.php') { file_exists('./install.php') ? header('Location: install.php') : print

深究angularJS系列 - 第二弹

深究angularJS系列 - 第二弹,在初步了解了Angular的基础上,进一步的针对Angular的控制器和作用域问题深入探究O(∩_∩)O~~ Angular控制器 控制器(Controller)的理解 控制器是对view的抽象,用来接收view的事件,响应view的请求: 控制器包含view的静态属性和动态的方法: 控制器与view是一对一的关系. 控制器(Controller)的结构 1 .controller("控制器的名字",function($scoppe){ 2 ..

线段树第二弹(区间更新)

上篇文章,我们介绍了线段树的基本概念和单点更新.区间查询,今天,我们来接着上次的线段树问题继续深入研究.在解决线段树问题的过程中,我们会遇到要求修改区间中某一元素值的问题,当然也可能会遇到要求修改一段子区间所有值的问题--即区间更新问题.回忆一下上篇文章单点更新的方法是,由叶节点逐级向上进行更新,此时更新一个节点值的时间复杂度为o(log n),(点击链接了解详情:线段树+RMQ问题第二弹),那么以这样的处理效率来进行区间更新结果会怎样?现在假设待更新区间数据的规模为 n ,那么就需要进行 n

《我与希乐仑》第二弹

致徐敏: 如果你觉得我的这篇报道侵害了你和贵公司的权益,你可以上法院告我,但我说的都是事实,不怕你告,有事找我律师,谢谢! 我是希乐仑科技发展(上海)有限公司前员工,曾经为希乐仑立下汗马功劳.这公司从2014年2月份开始搞我,我去年的绩效是3.8/5.0,完全没有绩效问题.他们倒好,自从我查完我们公司某商业间谍之后,就给我穿小鞋,说我这个不好,那个拖延,这不是扯淡吗?公司在3月5日非法把我裁掉,而且直到现在还未支付我2月份工资,行吧,那我就不再沉默了,当我吃素的是吧!我现在把这件事情公之于众,望

Webpack热更新原理

开发环境页面热更新早已是主流,常见的需求如赛事网页推送比赛结果.网页实时展示投票或点赞数据.在线评论或弹幕.在线聊天室等,都需要借助热更新功能,才能达到实时的端对端的极致体验. webpack-hot-middleware webpack-hot-middleware中间件是webpack的一个plugin,通常结合webpack-dev-middleware一起使用.借助它可以实现浏览器的无刷新更新(热更新),即webpack里的HMR(Hot Module Replacement).如何配置

C/C++中容器vector使用方法<第二弹>

此文总结常用vector操作,是前一篇的续作!只有代码,详细请看代码中的注释.出于反爬虫的目的,你不是在http://blog.csdn.net/zhanh1218上看到的,肯定不是最新最全的. /********************************************************************* * file_name: vector_test.cpp * * Created on: 2014年6月28日 下午3:34:23 * Author: The_T

MongoDB第二弹——基本操作

1 查看各个项目的Project ID编号 mysql -uroot -h10.10.2xx.xx show databases; use bugfree2; desc bf_TestProject; select ProjectID,ProjectName from bf_TestProject;(查询结果如下) 2 在/var/www/html/bugfree/BugFile路径下创建文件夹 mkdir Project2  Project3  Project4  Project5  Proj

黑马程序员:赶紧下载iOS10开发教程第二弹

虽然6月13日WWDC2016的发布会结束了,但是本届大会的开发者session环节还在持续进行着.黑马程序员本着对技术的狂热,对学生负责的态度,仍然坚持每天对课程进行深入的研发.本文主要是黑马程序员对iOS 10 中SDK所更新的主要内容进行总结.根据黑马程序员惯例,在文章的最后,有相关相关教学视频及Demo会有分享链接,供各位下载! 1.Grand Center Dispatch GCD 在本次一更新主要有以下内容: ?创建私有队列 ?安排异步执行的工作项目(items) ?GCD能自动将工

日均百万PV架构第二弹(缓存时代来临)

上一弹中我们规划并搭建了基本的架构组成,当然此架构存在诸多问题,我们在接下来的章节中将不断 完善其功能特性,使之成为实至名归的百万PV架构站点   首先来对上一弹架构做基本的ab 并发100, 总量2000的测试,让我们对站点性能有所熟知,之后在之前的功能上我们添加多道 缓存对性能进行提升. (ps: 测试机器均为虚拟机环境 , 大约性能比主流服务器低 2.5 - 3.5 倍 , 测试参 数可做此对比评估) 按照规划,我们在salve3.king.com中添加两实例的varnish,在slave