webpack入门(一)webpack的动机 ---前端专业英语
记得某次考试,出国N年老师出的卷子全是英语,坑的英语不好的我们不要不要的。幸亏上了专业英语课。最重要的是专业英语对于我们很重要,比如webpack,一堆博客都是几小时入门,如何会用webpack,当你想用它的某种特性,比如异步加载moudle,用到require.ensure,或者一些很细节的api,一些遇到的问题,都是中文网站,博客解决不了的。曾经嘲笑那些学视频的自认为大神前端,你找个webpack中文详细教学视频看看。
[笑哭].这次,我们来copy一下webpack官网,学一下英语。
开始的motivition,why we do it.web app 能做很多事,我们能在浏览器里用js做更多的事…致使客户端有n多代码,我们需要一种代码加载,模块加载的东西。
Module systems offer the option to split your code base into modules.模块系统提供一个选项去把代码划分到模块里。
There are multiple(多重的;多个的;复杂的;多功能的;) standards for (标准)how to define dependencies and export values:下面列举了模块的标准,amd,cmd,es6的import等。
This is the way you would handle a modularized(模块化的)code base if you didn’t use a module system.
<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="libraryA.js"></script>
<script src="module3.js"></script>
他们共同的问题Common problems
- Conflicts in the global object.全局对象的冲突
- Order of loading is important.加载的顺序
- Developers have to resolve dependencies of modules/libraries.开发者需要解决模块和库的依赖问题
- In big projects the list can get really long and difficult to manage.大工程的list很大很难管理
CommonJs: synchronous(同步) require cmd的同步加载
AMD: asynchronous require amd的异步加载
他们的Pros(优点)Cons(缺点)就不写了。
ES6的模块加载机制
import "jquery";
export function doStuff() {}
module "localModule" {}
Pros
- Static analysis is easy 静态分析是很容易的
- Future-proof as ES standard 是未来的标准
Cons
- Native browser support will take time 本地浏览器支持还需要一段时间
- Very few modules in this style 还很少有模块是es6版的
TRANSFERRING
Modules should be executed on the client, so they must be transferred from the server to the browser.
There are two extremes on how to transfer modules: 模块应该在客户端执行,所以他们必须要从服务器端转换到浏览器,这有怎样转换模块的两个极端。
- 1 request per module 每个模块一个需求
- all modules in one request 所有模块都用一个需求
Both are used in the wild, but both are suboptimal: 这俩都是野办法,用的都是(次优的)不咋样。
- 1 request per module
- Pro: only required modules are transferred 只有加载的模块被转换了
- Con: many requests means much overhead 更多的请求意味着更多的开销
- Con: slow application startup, because of request latency 这个app启动很慢,因为请求的延迟
- all modules in one request
- Pro: less request overhead, less latency 更少的请求开销和延迟
- Con: not (yet) required modules are transferred too 未请求的模块也被转换了
Chunked transferring 分块转换(chunk)
A more flexible transferring would be better. A compromise between the extremes is better in most cases.一个更加复杂的转换可能是更好的,在大多数情况下,极端之间的妥协是更好的。
→ While compiling all modules: Split the set of modules into multiple smaller batches (chunks). 编译所有模块的时候,把这个模块切分到一些更小的分支,也就是每个chunk
We get multiple smaller requests. Chunks with modules that are not required initially(最初)are only requested on demand(需求), The initial request doesn’t contain your complete code base and is smaller.我们得到一些更小的请求,modules的chunks没有加载最初的,仅加载了需要的chunk,初始请求不包含你完整的代码库,它更小。
The “split points” are up to the developer and optional.划分成chunk这点是开发者可选的。
→ A big code base is possible!
Note: The idea is from Google’s GWT.
Read more about Code Splitting.
WHY ONLY JAVASCRIPT?
Why should a module system only help the developer with JavaScript? There are many other static resources that need to be handled:为啥模块系统只能服务于js开发者?这里这些静态资源都需要被处理。
- stylesheets
- images
- webfonts
- html for templating
- etc.
And also:
- coffeescript → javascript
- elm → javascript
- less stylesheets → css stylesheets
- jade templates → javascript which generates html
- i18n files → something
- etc.
This should be as easy as:
require("./style.css");
require("./style.less");
require("./template.jade");
require("./image.png");
Read more about Using loaders and Loaders.
STATIC ANALYSIS
When compiling all the modules a static analysis tries to find dependencies.当编译所有模块的时候,静态分析试着去寻找依赖。
Traditionally this could only find simple stuff without expression, but i.e. require("./template/" + templateName + ".jade")
is a common construct.
传统上只能找到简单的依赖但是不被解析。但是ie里面require("./template/" + templateName + ".jade")是公认的结构
Many libraries are written in different styles. Some of them are very weird…许多库都用不同方式写,而许多都是很奇怪的。。。
webpack入门(一)webpack的动机 ---前端专业英语的更多相关文章
- Webpack入门——使用Webpack打包Angular项目的一个例子
2016.1.22,对大多数人来说,这是一个非常平常的日子,但这却是我决定在博客园写博客的日子.虽然注册博客园的博客已有4年8个月,却一直没有动手写过一篇博客,原因是觉得自己水平不行,写不出好东西,所 ...
- webpack入门--前端必备
webpack入门--前端必备 什么是 webpack? webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来 ...
- webpack入门之简单例子跑起来
webpack介绍 Webpack是当下最热门的前端资源模块化管理和打包工具,它可以将很多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源,还可以将按需加载的模块进行代码分割,等到实际需要的时 ...
- Webpack 入门指南 - 2.模块
这一次我们谈谈模块问题. 通常我们希望这个项目可以分为多个独立的模块,比如,上一次提高的 hello 函数,如果我们定义为一个模块,其它模块引用之后,直接调用就好了.在前端怎么使用模块呢?这可说来话长 ...
- webpack入门必知必会
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 这是我第一篇介绍webpack的文章,先从一个入门教程开始吧,后续会有更多相关webpack的文章推 ...
- webpack入门+react环境配置
小结放在前:这篇文章主要是为下一篇的react提前铺好路,webpack是一个前端资源模块化管理和打包工具,说白了就是方便我们管理自己的常用的一些代码,比如你开发中用到sass以及jade同时用到es ...
- Webpack 入门教程
Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 本章节基于 Webpack3.0 测试通过. 从图中我们可以看出,W ...
- webpack入门-个人学习资源收集
本来是想自己写哈个人学习webpack心德的,不过网上现在已经有各种比较好的,详细的入门或者深入资源了. 所以我就简单总结了一下,我在入门webpack时看的一些博客和文档,以及顺道看到的一些觉得也应 ...
- webpack快速入门——给webpack增加babel支持
1.Babel的安装与配置 Babel其实是几个模块化的包,其核心功能位于称为babel-core的npm包中,webpack可以把其不同的包整合在一起使用,对于每一个 你需要的功能或拓展,你都需要安 ...
随机推荐
- String类内存空间详解
java.lang.String类内存问题详解 字符串理解的难点在于其在堆内存空间上的特殊性,字符串String对象在堆内存上有两种空间: 字符串池(String pool):特殊的堆内存,专门存放S ...
- ArrayList性能短板深入分析
ArrayList的数据结构主体是Object[]数组,数组对象在内存的位置是成块成块的. 1.对数组进行非尾部修改,会引发System.arrayCopy()行为.这就需要对后半部要移动的对象进行内 ...
- rem 自适应、整体缩放
html{ font-size: calc(100vw/7.5); } 说明: 100vw是设备的宽度,除以7.5可以让1rem的大小在iPhone6下等于100px. 若是低版本的设备不支持rem, ...
- MySQL 字段内容区分大小写
数据由Oracle 迁入MySQL ,由于之前Oracle区分大小写,MySQL的配置使用了默认配置,导致一些数据导入失败,有的唯一键报错,冲突. 将测试过程记录在下面. 数据库版本:MySQL 5. ...
- Mysql如何快速插入100万条记录?
1.java程序拼接insert带多个value,使一次提交多个值. 2.插入数据之前先删除索引(注意主键不能删除),然后插入数据,最后重建索引 3.可以设置手动commit,用来提高效率 4.使用批 ...
- Vue之双向数据绑定
demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...
- github上传时出现error: src refspec master does not match any解决办法22
1 error:src refspec master does not match any这个问题,我之前也遇到过,这次又遇到了只是时间间隔比较长了,为了防止以后再遇到类似问题,还是把这个方法简单记录 ...
- Jenkins+PowerShell持续集成环境搭建(六)参数化构建
参数化构建可以应用于动态绑定源码地址等情况. 勾选“This build is parameterized”: 如果需要动态绑定源码地址,参考: 配置完成后构建项目变成:
- 一般服务器端口号的反斜杠表示访问webapp下的资源
- poj-1386(欧拉回路)
题意:给你n个单词,每个单词可以和另一个单词连接,前提是(这个单词的尾字母等下一个单词的首字母),问你有没有一种连法能够连接所有的单词: 解题思路:每个单词可以看成是首字母指向尾字母的一条边,那么就变 ...