如今的网站正在演化为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 介绍的更多相关文章

  1. Webpack入门——使用Webpack打包Angular项目的一个例子

    2016.1.22,对大多数人来说,这是一个非常平常的日子,但这却是我决定在博客园写博客的日子.虽然注册博客园的博客已有4年8个月,却一直没有动手写过一篇博客,原因是觉得自己水平不行,写不出好东西,所 ...

  2. Webpack 入门指南 - 3. Hello, Angular2!

    Webpack 入门指南 - 1.安装 Webpack 入门指南 - 2.模块 这一次,我们使用 Webpack 来打包 Angular 2 的应用. 与官方的 Hello, Angular 2 项目 ...

  3. webpack 入门

    webpack webpack,是一款模块加载器兼打包工具.能将 JS.coffee.less.sass.图片等作为模块来使用. 经过一个多月的摸索,姑且算是入门了.因此重新写个小DEMO来加深自己对 ...

  4. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  5. webpack入门必知必会

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 这是我第一篇介绍webpack的文章,先从一个入门教程开始吧,后续会有更多相关webpack的文章推 ...

  6. Webpack 入门教程

    Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 本章节基于 Webpack3.0 测试通过. 从图中我们可以看出,W ...

  7. webpack入门(2)

    webpack入门(2) ps:每个案例都是基于前一个案例改造的 webpack入门(1) 戳这里 案例源码戳这里 十二.ProvidePlugin 自动加载模块 new webpack.Provid ...

  8. webpack入门-个人学习资源收集

    本来是想自己写哈个人学习webpack心德的,不过网上现在已经有各种比较好的,详细的入门或者深入资源了. 所以我就简单总结了一下,我在入门webpack时看的一些博客和文档,以及顺道看到的一些觉得也应 ...

  9. webpack入门(1)

    webpack入门(1) 源码戳这里 ps:每个案例对应相应的demo,例如"案例1"对应"demo1" 一.webpack基本功能及简单案例 安装webpac ...

  10. webpack入门指南(基于webpack v4.41.2)

    2019年12月5日初稿,目前webpack已经更新到v4.41.2,本文正是基于该版本,在windows8.1操作系统下进行的demo编译,适用于想入门webpack的前端开发人员. webpack ...

随机推荐

  1. jquery插件-表单验证插件-demo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. CloudStack4.4安装 ubuntu14.04

    CloudStack 项目的活跃程度仅次于 OpenStack. 和大多数云计算.集群软件一样,CloudStack 也是控制节点+计算节点这种架构,控制节点(cloudstack-managemen ...

  3. Bzoj2683 简单题

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  4. Sql Server日期查询-SQL查询今天、昨天、7天内、30天

    今天的所有数据: 昨天的所有数据: 7天内的所有数据: 30天内的所有数据: 本月的所有数据: 本年的所有数据: 查询今天是今年的第几天: select datepart(dayofyear,getD ...

  5. 控件的invoke和beginInvoke方法

    System.Windows.Forms.Timer 的timer是在主线程上执行的,因此在timer的tick事件中操作界面上的控件不会发生线程的安全性检测. Control的invoke和begi ...

  6. Objective-C 利用OC的消息机制,使用Method Swizzling进行方法修改

    功能:修改父类不可修改函数方法,函数方法交换 应用场景:假如我们使用的他人提供一个的framework,.m已被打包成二进制.a无法修改源码,只留下.h头文件,那假如代码中某个函数出现了问题可以通过这 ...

  7. git实习笔记

    一.查找文件目录 二.添加上传文件 三.提交文件,描述信息 四.登录

  8. django makemigrations的一个特性

    Migrations will run the same way on the same dataset and produce consistent results, meaning that wh ...

  9. python模块xlrd安装-处理excel文件必须

    我安装了很久,网上查了很多资料,但都不太适合,综合 了一下,再写一写,希望有用... 官网下载xlrd:官网xlrd下载地址, 真的很难下,我用讯雷,有时候断断续续 下面是我的百度网盘地址,分享出来, ...

  10. 个人作业—Week2:微软必应词典案例分析

    调研.评测 bug报告: 标题:Window 10版必应词典客户端口语练习功能无法使用 环境:Window 10, 微软必应词典(UWP) 版本2.6.1.0,屏幕无重力感应模块 重现步骤: 1)   ...