webpack入门(一)——webpack 介绍
如今的网站正在演化为web应用程序:
1. 越来越多的使用JavaScript。
2. 现代浏览器提供更广泛的接口。
3. 整页刷新的情况越来越少,甚至更多代码在同一个页面。(SPA)
因此有很多代码在客户端!
一个体量庞大的代码库需要好好组织。模块系统提供代码库划分成模块的选项。
模块系统风格
目前有多个标准定义依赖和输出:
1. script标签(不要模块系统)
2. CommonJS
3. AMD和它的一些变种
4. ES 6
5. 其它
script 标签的样式
下面这种就是不用模块系统,你会怎么去管理你的代码。
<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="libraryA.js"></script>
<script src="module3.js"></script>
模块接口导出到全局对象,即window
对象。模块的接口可以访问全局对象的依赖关系
常见问题
全局冲突
严重依赖加载的顺序
开发人员必须人工解决模块/库的依赖关系
大型项目,script一溜下来可以很长,难以管理
CommonJs: 同步加载
这种风格用同步require 的方法去加载一个依赖并用暴露一个接口。 一个模块可以通过给export
对象添加属性或给module.exports
设置值 来指定导出。
require("module");
require("../file.js");
exports.doStuff = function() {};
module.exports = someValue;
服务器端node.js用的就是这种标准。
优点:
1. 服务器端模块可以重用
2. 已经有许多模块用这种风格(npm)。生态圈良好
3. 非常简单和容易使用。
劣势
1. 阻塞调用不适用网络。网络请求是异步的。
2. 没有并行加载机制。
哪些在用?
1. 服务端 -node.js
2. browserify
3. modules-webmake -编译到一个包
4. wreq -客户端
AMD: 异步加载
其它模块系统(例如 浏览器) 同步加载有困难(CommonJS) 而引入的一个异步版本(和定义模块和输出值的一种方法 )。
require(["module", "../file"], function(module, file) { /* ... */ });
define("mymodule", ["dep1", "dep2"], function(d1, d2) {
return someExportedValue;
});
优点:
1. 适合网络的异步请求的风格
2. 并行加载多个模块。
劣势
1. 编码费力,更难读和写
2. 看起来只是权宜之计。
哪些在用?
1. require.js
2. curl
ES6模式
ES6借鉴其它语言给javascript新加了一些语法结构,有import语法。
import "jquery";
export function doStuff() {}
module "localModule" {}
优点:
1. 静态分析很容易。
2. 不会过时的ES标准 。
劣势
1. 浏览器支持需要时间。(迟早的事)
2. 很少有模块用这种风格。生态圈
目前没有公开的方案
开发者应当自己选择适合自己的风格。允许现有的代码和包能正常工作,可以很容易地添加自定义模块风格。
传输
模块应该在客户端执行,所以他们必须从服务器传输到浏览器。
传输模块有两个极端:
1. 一个一个地传。
2. 全部打包在一个里传。
两种用法都泛滥,但是两种都太low了。
一个一个地传
优点:只有确实需要的模块才会传输过去。
缺点:许多请求意味着很多开销。
缺点:应用程序启动缓慢,因为请求延迟
全部一个地传
优点:请求的开销更少,更少的延迟
缺点:很多暂时不需要的模块给传输过去了。
分块传输
更灵活的传输可能会更好。大多数情况下在这两种极端之间的折中比较好。
=>在编译所有模块时:把模块切分成小块儿(chunks)。
这样允许多个更小、更快的请求。有些模块不是一开始就需要的,含有这些模块的分块在需要的时候可以加载到。这样加快了初始化速度,但是在需要用那些模块时仍然让你去抓更多的代码。
开发者怎么做“切分点”,可以根据情况自由抉择。
=》一个代码库是可能的哟。
注意:这些观点来自谷歌 GWT.
怎么可能只有javascript
为什么一个模块系统只能帮程序猿们解决javascript问题呢?还有许多其他资源需要处理:
样式表
图片
web字体
html模板
等等
或者 一些预编译和后编译语言
coffeescript → javascript
elm → javascript
less 样式→ css 样式
jade 模板→ javascript 生成 html
i18n files → something
等等
这些东西应该也像下面这样容易:
require("./style.css");
require("./style.less");
require("./template.jade");
require("./image.png");
静态分析
当编译所有这些模块时,一个静态分析试图找到自己的依赖。
传统上这只能找到简单的东西没有表达 。但是
require("./template/" + templateName + ".jade")
这样是常见的结构。
有些库是用一些不一样的风格写的。它们有些很奇怪(不可思议)。
策略
聪明的解析办法允许现存代码能跑起来,如果程序猿用了一些怪异的东西,它能试图找到兼容的解决方案。
什么是webpack
webpack是一个模块打包器。webpack把模块(s)连同它的依赖一起打包生成包含这些模块的静态资源。
为什么另用一个打包器?
现有的模块打包器不适合大项目(大单页面应用)程序。代码分割和静态资源无缝模块化的迫切需求,催生了一个新的模块打包器。
我试图扩展现有的模块打包器,但是它没能实现所有的目标。
目标如下:
1. 把依赖树切分成块,实现按需加载。
2. 保持低初始加载时间
3. 每个静态资源都能是一个模块
4. 具备把第三方库集成为模块的能力
5. 具备打包器每个部分几乎都能自己定制的特点。
6. 适合大型项目。
webpack有什么不同?
代码分割
webpack依赖树中有两个依赖类型:同步和异步。异步模块切分成一个新的的块。在块树(chunk tree)优化之后,文件会为每个chunk发文件。
loader
webpack可以处理javascript本身,但loader用来将其它资源转换为javascript。这样以来,所有资源都被格式化成模块了。
智能解析
webpack有一个智能解析器,它能处理几乎所有的第三方库。它甚至允许你在依赖中你像这样加表达式 require("./templates/" + name + ".jade")
。它可以处理最常见的模块化标准风格:CommonJS和AMD。
安装
node.js
安装node.js
包管理工具 npm会一起装上。
webapck
webpack 可以用用npm 命令来装
$ npm install webpack -g
webpack 已经全局安装了,现在 webpack
命令可用了。
项目中使用webpack
你的项目最好也有webpack 依赖。 这样你可以在项目中自由决定用webpack哪个版本而必去用全局那个webpack。
用 npm
命令添加一个 package.json文件
$ npm init
如果你不发布npm包,Init过程中的问题不重要,都可以忽略。
安装webpack 并添加到package.json中:
$ npm install webpack --save-dev
版本
有两个webpack版本可用。稳定版本和beta版。beta版 在版本字符中标记为 -beta
。beta版本可能包含脆弱的或者实验功能,都没进行过多少测试。正式场景下应该用稳定版。
$ npm install webpack@1.2.x --save-dev
开发工具
如果你想用开发工具,先安装它
$ npm install webpack-dev-server --save-dev
原文地址:http://blog.csdn.net/keliyxyz/article/details/51571386
webpack入门(一)——webpack 介绍的更多相关文章
- Webpack入门——使用Webpack打包Angular项目的一个例子
2016.1.22,对大多数人来说,这是一个非常平常的日子,但这却是我决定在博客园写博客的日子.虽然注册博客园的博客已有4年8个月,却一直没有动手写过一篇博客,原因是觉得自己水平不行,写不出好东西,所 ...
- Webpack 入门指南 - 3. Hello, Angular2!
Webpack 入门指南 - 1.安装 Webpack 入门指南 - 2.模块 这一次,我们使用 Webpack 来打包 Angular 2 的应用. 与官方的 Hello, Angular 2 项目 ...
- webpack 入门
webpack webpack,是一款模块加载器兼打包工具.能将 JS.coffee.less.sass.图片等作为模块来使用. 经过一个多月的摸索,姑且算是入门了.因此重新写个小DEMO来加深自己对 ...
- webpack入门和实战(一):webpack配置及技巧
一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...
- webpack入门必知必会
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 这是我第一篇介绍webpack的文章,先从一个入门教程开始吧,后续会有更多相关webpack的文章推 ...
- Webpack 入门教程
Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 本章节基于 Webpack3.0 测试通过. 从图中我们可以看出,W ...
- webpack入门(2)
webpack入门(2) ps:每个案例都是基于前一个案例改造的 webpack入门(1) 戳这里 案例源码戳这里 十二.ProvidePlugin 自动加载模块 new webpack.Provid ...
- webpack入门-个人学习资源收集
本来是想自己写哈个人学习webpack心德的,不过网上现在已经有各种比较好的,详细的入门或者深入资源了. 所以我就简单总结了一下,我在入门webpack时看的一些博客和文档,以及顺道看到的一些觉得也应 ...
- webpack入门(1)
webpack入门(1) 源码戳这里 ps:每个案例对应相应的demo,例如"案例1"对应"demo1" 一.webpack基本功能及简单案例 安装webpac ...
- webpack入门指南(基于webpack v4.41.2)
2019年12月5日初稿,目前webpack已经更新到v4.41.2,本文正是基于该版本,在windows8.1操作系统下进行的demo编译,适用于想入门webpack的前端开发人员. webpack ...
随机推荐
- jquery插件-表单验证插件-demo
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CloudStack4.4安装 ubuntu14.04
CloudStack 项目的活跃程度仅次于 OpenStack. 和大多数云计算.集群软件一样,CloudStack 也是控制节点+计算节点这种架构,控制节点(cloudstack-managemen ...
- Bzoj2683 简单题
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
- Sql Server日期查询-SQL查询今天、昨天、7天内、30天
今天的所有数据: 昨天的所有数据: 7天内的所有数据: 30天内的所有数据: 本月的所有数据: 本年的所有数据: 查询今天是今年的第几天: select datepart(dayofyear,getD ...
- 控件的invoke和beginInvoke方法
System.Windows.Forms.Timer 的timer是在主线程上执行的,因此在timer的tick事件中操作界面上的控件不会发生线程的安全性检测. Control的invoke和begi ...
- Objective-C 利用OC的消息机制,使用Method Swizzling进行方法修改
功能:修改父类不可修改函数方法,函数方法交换 应用场景:假如我们使用的他人提供一个的framework,.m已被打包成二进制.a无法修改源码,只留下.h头文件,那假如代码中某个函数出现了问题可以通过这 ...
- git实习笔记
一.查找文件目录 二.添加上传文件 三.提交文件,描述信息 四.登录
- django makemigrations的一个特性
Migrations will run the same way on the same dataset and produce consistent results, meaning that wh ...
- python模块xlrd安装-处理excel文件必须
我安装了很久,网上查了很多资料,但都不太适合,综合 了一下,再写一写,希望有用... 官网下载xlrd:官网xlrd下载地址, 真的很难下,我用讯雷,有时候断断续续 下面是我的百度网盘地址,分享出来, ...
- 个人作业—Week2:微软必应词典案例分析
调研.评测 bug报告: 标题:Window 10版必应词典客户端口语练习功能无法使用 环境:Window 10, 微软必应词典(UWP) 版本2.6.1.0,屏幕无重力感应模块 重现步骤: 1) ...