webpack

webpack
演进
image.png
image.png
image.png
image.png
image.png
image.png

为什么前端需要构建?

  • 开发复杂化
  • 框架去中心化
  • 语言编译化
  • 开发模块化

为什么Webpack?

  • Vue-cli / React-starter / Angular-cli
  • Code-splitting
  • 天生的模块化
  • ...

模块化开发

  • JS 模块化
  • CSS 模块化

JS 模块化

  • 命名空间
  • COMMONJS
  • AMD/CMD/UMD
  • ES 6 module

在很多年前,命名空间是考量一个人代码是否入门的一个基础问题,后来我们有了专门的前端模块化规范,从触角伸向服务端的 nodejs 开始,我们有了commonjs 规范,然后我们的社区为了在浏览器端也开始使用模块化方案,就开始有了 AMD, 国内由我们的淘宝的玉伯的seajs 提出了 CMD 规范

image.png

YUI 2 中大量使用了命名空间,在还没有模块化的世界里,通过命名空间,能极大缓解冲突。

image.png

YUI3 通过沙箱机制,解决了命名空间带来的问题。

image.png
  • 1、1.0 -> 1.1.1
  • 2、一个文件为一个模块
  • 3、模块内的变量不能被访问到,只能通过exports方法暴露出的接口才能被外界访问到
  • 4、通过require 同步加载模块
image.png
image.png

为了使得浏览器和 nodejs 一样具有模块化开发的特点,社区发明了AMD 规范,也就是Async Module Definition,在Commonjs 中,所有的模块是同步加载,服务端由于都是本地文件可以承受这样的一个加载开销,而我们的浏览器端呢?如果要求用户来承担这一个同步加载所有模块的开销,一定会影响到用户的浏览网页的速度。AMD 正是为了解决这一点而生。

image.png

第一幅图是AMD 规范中的定义一个模块,分别有三个参数,
第一个参数是模块名称,第二个是模块依赖,第三个是工厂函数。
第一个和第二个参数都可以省略

第二幅图是一个匿名模块的定义,省略第一个参数名,图中依赖了abcdef 6个模块,在AMD规范中,当引入A,B,C,D,E,F的时候, 这些模块内部的内容已经被浏览器执行了。即便还没有被使用他的模块真正用到。这个就是AMD 的依赖前置

image.png
  • 1、CMD 全称是 common module definition
  • 2、在CMD 规范中,一个文件为一个模块
  • 3、也同样是通过define 和 require 来定义和加载一个模块
  • 4、代表作是 seajs
  • 5、宗旨是尽可能的懒执行
  • 6、规范的地址
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

尽管之前我们有遇到过这么多类型的模块化规范,但是在webpack 中推荐使用的是ES6 module,所以在如今的开发过程中,我们可以选择ES6 模块规范深入了解掌握,就可以满足我们的使用。由于webpack 基于 nodejs 的工具,在 nodejs 中是采用的模块化规范是 CommonJS ,所以我们除去ES6 外再掌握 CommonJS 就可以了。所以老师推荐的是掌握 Commonjs 和 ES6 modules,而对于AMD & CMD 大家了解就可以了。

image.png
image.png

OOCSS是object-oriented CSS的缩写. 主要有两个意思:
结构和设计分离
容器和内容分离
使用这种结构, 开发人员获得可以在不同地方使用的CSS类.
通常这时候总是会有两个消息(一个好消息和一个不好的消息):
好消息: 通过复用来减少代码量(DRY原则)
不好的消息: 维护非常困难(复杂). 当你修改某一个具体的元素的样式的时候, 大部分情况下, 除了修改CSS本身(因为多数的CSS类是通用的), 你还不得不添加更多的标记类(markup).

image.png

SMACSS是可扩展和模块化结构CSS的简称. 该方法的主要目标是减少代码量并简化代码维护.
Jonathan Snook把它归纳为5个部分:
基本规则(Base rules): 这些是网站的主要元素的样式, 如body, input, button, ul, ol等. 在这一步中, 我们主要使用HTML标签和属性选择器, 在特殊情况下, 使用CSS类(如: 如果您有JavaScript-Style选择);
布局规则(Layout rules): 主要是些全局元素, 顶部, 页脚, 边栏等模块的大小. Jonathan建议使用ID选择器, 因为这些模块不太可能在同一个页面上出现多次. 然而, 本文作者认为这是个很不好的习惯(每当ID出现在样式文中, 感觉世界顿时变得灰暗, 有一股莫名的哀伤).
模块规则(Modules rules): 模块(类似于卡片布局)可以在一个页面中使用多次. 对于模块CSS类, 不建议使用ID和tag选择器(这是为了方便重用以及上下文独立).
状态规则(State rules): 在这一步中, 规定了模块的各种状态以及网站的基础部分. 这是唯一允许使用"!important"的地方.
主题规则(Theme rules): 设计您可能需要更换的样式.

image.png

Atomic CSS是CSS架构的一种方法, 它的好处是写出基于视觉功能的小的, 单用途CSS类.
使用Atomic CSS, 为每个可重用的属性创建单独的CSS类. 例如, margin-top: 1px; 就可以创建一个类似于mt-1的CSS类, 或者width: 200px; 对应的CSS类为w-200.
这种样式允许您通过重用声明来最大程度地减少您的CSS代码数量, 并且也能很轻松的更改模块, 例如, 更改以技术任务时.
然而, 这种方法有很大的缺点:
CSS类名是属性名称的描述, 而不是元素的自然语义. 这种想象很容易使人在开发过程中变得迷茫. 开发本身也十分容易复杂化.
直接在HTML中进行显示设置.

image.png
image.png
image.png
image.png
image.png

Webpack 中使用css modules非常简单是需要通过使用css-loader 开启 module 这个参数就可以了

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容