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语法。

1 import "jquery";
2 export function doStuff() {}
3 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");
1 require("./style.less");
2 require("./template.jade");
3 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 [email protected] --save-dev

开发工具

如果你想用开发工具,先安装它

$ npm install webpack-dev-server --save-dev

原文地址:http://blog.csdn.net/keliyxyz/article/details/51571386

时间: 2024-10-18 05:11:02

webpack入门(一)——webpack 介绍的相关文章

React +ES6 +Webpack入门

React +ES6 +Webpack入门 React已成为前端当下最热门的前端框架之一 , 其虚拟DOM和组件化开发让前端开发更富灵活性,而Webpack凭借它异步加载和可分离打包等优秀的特性,更为React的开发提供了便利.其优秀的特性不再赘述.本文将详细的记录react babel webpack的环境搭建,以及搭建的过程中遇到的一些坑. 一.新建React项目 1.如图为新建react项目结构,其中 entry.js放置react入口代码,index.js放置react组件代码,asse

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

Webpack 入门指南 - 1.安装 Webpack 入门指南 - 2.模块 这一次,我们使用 Webpack 来打包 Angular 2 的应用. 与官方的 Hello, Angular 2 项目相比,我们不使用 System.js,而是使用 TypeScript 直接编译,然后使用 Webpack 打包生成代码. 1. 下载 Angular 2 以及依赖包 修改我们的 package.json 文件,添加 Angular 2 涉及的包,和 Angular 2 所依赖的包,以后,我们可以慢慢

webpack 入门2

2017年9月18日更新,添加了一个使用webpack配置多页应用的demo,可以点击此处查看 2017年8月13日更新,本文依据webpack3.5.3将文章涉及代码完全重写,所有代码都在Mac上正常运行过.希望依旧对你学习webpack有帮助. 2017年8月16号更新: 最近在Gitchat上将发起了一场关于webpack的分享,目的在于一起花最短的时间理解和学会webpack,感兴趣的童鞋可以微信扫描注册哈. webpack从入门到工程实践 写在前面的话 阅读本文之前,先看下面这个web

webpack入门(2)

webpack入门(2) ps:每个案例都是基于前一个案例改造的 webpack入门(1) 戳这里 案例源码戳这里 十二.ProvidePlugin 自动加载模块 new webpack.ProvidePlugin() 上面的案例太复杂,下面再新建一个简单的项目来讲解 案例16 -- 全局引入jquery 新建一个项目,如下 [webpack] |-- src |-- index.html |-- index.less |-- index.js |-- package.json |-- webp

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

本来是想自己写哈个人学习webpack心德的,不过网上现在已经有各种比较好的,详细的入门或者深入资源了. 所以我就简单总结了一下,我在入门webpack时看的一些博客和文档,以及顺道看到的一些觉得也应该了解的东西 webpack官方文档: https://www.webpackjs.com/concepts/ 比较好的webpack入门博客: https://segmentfault.com/a/1190000006178770 https://www.jb51.net/article/1173

webpack入门(二)资源管理

在我们的正常项目中,前端会有一些其他资源,比如图像.CSS.JSON.字体现在我们整合一些其他资源,看看webpack是如何处理webpack最出色的功能之一就是除了js文件,还可以通过loader的方式引入其他任何类型的文件我们先简单的介绍一下loader的概念loader让webpack能够去处理那些非js文件(webpack自身只能理解javascript),loader可以将所有类型的文件转换为webpack能够处理的有效模块,然后就可以利用webpack的打包能力,对他们进行处理我在d

webpack入门

前面的话 在webpack出现之前,市面上已经存在的模块管理和打包工具并不适合大型的项目,尤其单页面 Web 应用程序.最紧迫的原因是如何在一个大规模的代码库中,维护各种模块资源的分割和存放,维护它们之间的依赖关系,并且无缝的将它们整合到一起生成适合浏览器端请求加载的静态资源.webpack是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载 webpack的内容丰富且杂

webpack入门--前端必备

webpack入门--前端必备 什么是 webpack? webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理.我们可以直接使用 require(XXX) 的形式来引入各模块,即使它们可能需要经过编译(比如JSX和sass),但这不用我们理会,因为 webpack 有着各种健全的加载器(loader)在处理这些事情. 为什么要使用 webpack? 很简单的一个道理,难道写react的同学会不用它

Webpack 入门

Webpack 入门 Webpack 是目前流行的打包工具,如何安装它呢? 1. 安装 Node Js 首先,Webpack 是基于 NodeJs 的工具,你必须首先安装 NodeJs. NodeJs 仅仅只需要在你的系统中安装一次就可以了. 2. 全局安装 Webpack 我们希望能够在系统的任何文件夹中使用 Webpack,使用的方式是通过 Webpack 命令来完成的,这需要我们全局安装 Webpack.这也只需要安装一次,以后每个项目就不需要重新全局安装了. $ npm install

webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server

一.webpack基础 1.在项目中生成package.json:在项目根目录中输入npm init,根据提示输入相应信息.(也可以不生成package.json文件,但是package.json是很有用的,所有建议生成) 2.安装webpaack a.在全局中安装webpack:npm install webpack -g b.将webpack安装到项目并将webpack写入package.json的devDependencies中:进入项目根目录,然后在命令行中输入npm install w