熟话说浓缩就是精华,哈哈,所以就这么简单粗暴的介绍下吧,写下的都是精华。

已经不是第一次听说webpack,但是我的起步有点晚,现在才看。开门见山~~

1.什么是webpack?

webpack是当下最热门的前端资源模块化管理和打包工具(就是一个打包器),可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源,还可以将需要加载的模块进行代码分离,等到实际需要的时候再进行异步加载。通过loader的转换,任何资源都可以视作模块,如COMMONJS模块 ,AMD模块,JS CSS ,JSON 等 ,它会根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

2.为什么要有webpack等打包器?

平常的模块加载方式都是在<script>标签里引入,这种情况是在全局作用模式window下的,这样做的弊端就是只能按<script>的书写顺序进行加载,而且全局作用域下容易产生冲突,引入数量比较多的文件情况下难以管理。

而且,如果单独请求每个模块会造成请求次数过多,导致应用启动缓慢,但是,将所有文件压缩成一个文件,一次请求加载所有模块会导致流量的浪费,初始化过程缓慢。

所以编译的时候对所有的代码进行静态分析,分析出各个模块的类型及依赖关系,然后将他们提交给适配的加载器处理,所以webpack就应运而生。

3.COMMONJS模块,AMD模块,CMD模块,UMD模块几种常用模块?

Commonjs:允许模块通过require方法同步加载所需依赖的其他模式,然后通过exports或module.exports来导出需要暴露的接口。

eg: require("module");

       require("./script.js");

       export.doStuff=function(){};

       module.exports=someValue;

优点:各个模块可以进行重用,npm中已经有许多可供使用的包。

缺点:只能是同步加载的,同步就意味着阻塞加载,所以不适合在浏览器环境中,因为浏览器的资源是同步加载的,不能非阻塞的并行加载多个模块。

应用实例:nodejs

Amd模块:它是在声明模块的时候就指定所有的依赖dependencies,并且还要当做形参传到factory中,对于依赖的模块提前执行依赖前置。

eg:  define("module", ["dep1", "dep2"], function(d1, d2){ return someExportedValue; });

   require(["module", "../file"],

   function(module, file) { /* ... */ });

优点:适合异步加载模块,在浏览器环境中,并且可以并行运行多个模块。和commonjs相反。

缺点:提前加好所有依赖,代码要复杂很多。

应用实例:requirejs,curl

Cmd模块:和AMD类似,并和Commonjs也有很大的兼容性。

eg: define(function(require, exports, module){

  var $ = require('jquery');

  var Spinning = require('./spinning');

  exports.doSomething = ... module.exports = ... })

优点:容易在nodejs中运行你的代码

缺点:依赖spm打包,模块的加载逻辑比较重、

应用实例:Sea.js

Umd模块:主要解决模块定义的跨平台问题

eg:  import "jquery";

   export function doStuff() {}

   module "localModule" {}

优点:容易进行静态分析,面向未来的ES标准;

缺点:原生浏览器不支持。

4.如何使用webpack?

假装你的电脑里面已经安装了Node.js, 然后输入:npm install webpack -g  ,可以通过webpack -h来查看安装信息。

(1).假装创建一个项目test,进入项目路径,创建一个index.html页面,代码如下图:

(2)然后再创建一个名为:bundle.js的文件,在上图的index.html中引入它。此文件里面什么代码都不需要写。

(3)在创建一个名为entry.js的文件,不需要在index.html页面引入哟,此文件里面用来写内容。

/**entry.js**/

document.write("hello world");

(4)然后将entry.js打包进bundle.js文件中,webpack会分析入口文件,解析包含依赖关系的各个文件,然后打包到bundle.js中

webpack entry.js bundle.js

webpack打包的原理就是给每一个模块都分配一个唯一的id并通过这个id索引和访问模块,启动时,会先执行entry.js里面的代码,其他模块会在运行require的时候执行。

(5)此时打开bundle.js文件查看,你就可以发现里面已经 有代码了:

(6)运行inde.html页面,在浏览器中就可以看到Hello world.

但是webpack本身是只能处理javascript模块的,如果碰到css,json等其他模块文件,就需要使用loader转换。 loader就是一个装换器,一个可以输入任何资源但是最终都会帮你转成js模块的工具。

总的来说loader有以下几点:

1.管道方式链式调用(允许多个文件转换,最后必定输出js文件) 。 2.loader可以同步或异步执行  3.倘若在nodejs环境下,可以做任何事情  4.loader加载时可以接受传参。

5.可以通过文件扩展名来绑定不同类型的文件。 6.loader是通过Npm发布和安装。7.通过定义package.json来指定,同样也可以导出一个loader来使用,命名规则是:xxx-loader。一般是什么功能就命名什么。

下面就直接来试试:

(1)在项目里面在新建一个名为:style.css的文件:输入 body{ background:green}

(2)修改entry.js  加入这一句  require("!style-loader!css-loader!./style.css")

(3)安装Loader.  npm install css-loader style-loader     先用css-loader读取它,再用style-loader将它插入页面中。

(4)重新打包:webpack entry.js bundle.js

(5)刷新index.html页面可以看到效果。

如果有错误,cmd打包时就会显示,index.html运行时,fireug也会显示的。

loader转换器还可以通过配置文件来执行哟

(1)通过往package.json里面新增配置项来完成。deDependencies

(2)在新配置个webpack.config.js文件

var webpack = require('webpack')

module.exports = {
resolve: { fallback: path.join(__dirname, "node_modules") },
resolveLoader: { fallback: path.join(__dirname, "node_modules") },
entry: './entry.js',
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {
loaders: [
{test: /\.css$/, loader: 'style!css'}
]
},
plugins:[
new webpack.BannerPlugin('This file is created by yu')
] }

(3)直接运行webpack ,刷新index.html 就可以查看效果

												

一天浓缩学习webpack经过的更多相关文章

  1. [译]开始学习webpack

    写在前面: 文章翻译自petehunt大神的petehunt/webpack-howto,作为学习webpack的开始.fork了一份,翻译后的在这里https://github.com/zjzhom ...

  2. 深入学习webpack(一)

    深入学习webpack(一) 模块化的相关库和工具已经很多了,包括require.js.sea.js和一些工程化工具webpack.gulp.grant.那么我们该如何选择呢? 其实,我们只需要掌握了 ...

  3. webpack4 学习 --- webpack和webpack-dev-server

    以前了解过webpack2, 所以对webpack 不是很陌生,就直接入主题吧.新建一个文件夹,就叫它webpack-tut吧.然后在文件中新建一个src 文件夹,存放我们的源文件,再在src 文件夹 ...

  4. 如何学习 Webpack

    webpack-howto Tip: 本文是 webpack-howto 的原文,我觉得这篇文章写得非常好,确实算是目前学习 webpack 入门的必读文章.直接收录之. 本教程的目标 这是一本教你如 ...

  5. 深入学习webpack(二)

    深入学习webpack(二) 在深入学习webpack(一)中,我通过一个例子介绍了webpack的基本使用方法,下面将更为系统的学习webpack的基本概念,对于一门技术的掌握我认为系统化还是很重要 ...

  6. 跟我一起学习webpack使用配置文件(二)

    接着跟我一起学习webpack(一)中的项目来,我们接下来使用配置文件 使用npx webpack -h 我们可以查看webpack的配置参数 从我们在package.json中添加的命令来看,当项目 ...

  7. 学习webpack基础笔记01

    学习webpack基础笔记 1.webpack搭建环境最重要的就是如何使用loader和plugins,使用yarn/npm安装插件.预处理器,正确的配置好去使用 2.从0配置webpack - 1. ...

  8. vue第二单元(webpack的配置-学习webpack的常用配置)

    第二单元(webpack的配置-学习webpack的常用配置) #课程目标 掌握webpack的常用配置 掌握如何根据实际的需求修改webpack的对应配置 了解webpack-dev-server的 ...

  9. 零基础学习webpack打包管理

    这些天在项目之余的时间学习了webpack打包项目的东西,非常荣幸的找到一些大神的文章来学习,死劲嚼了几天,终于略知一二.在以后的工作上还需继续学习,下面我将分享我这几天学到的一点东西,希望能让我一个 ...

随机推荐

  1. 通过 python的 __call__ 函数与元类 实现单例模式

    简单一句话,当一个类实现__call__方法时,这个类的实例就会变成可调用对象. 直接上测试代码 class ClassA: def __call__(self, *args, **kwargs): ...

  2. vue2.0 路由模式mode="history"的作用

    特别提醒:开启mode="history"模式,需要服务端的支持,因为出现"刷新页面报错404"的问题: 备注:微信分享:vue项目路由带"#&quo ...

  3. Windows批量添加防火墙例外端口

    Windows下批量添加防火墙例外端口,查了网上资料,基本上都是使用"Netsh命令",循环增加端口,这会导致建立的规则特别多,不便于管理,查了下微软的资料,原来是Netsh命令, ...

  4. [闲的蛋疼系列]从零开始用TypeScript写React的UI组件(0)-先写一个Button??

    0.咸鱼要说的 一入前端深似海,咸鱼入海更加咸. 最近闲的蛋疼,手上年前的事也完成了7788了,借助[PG1]的话来说,我们要keep real. 咸鱼肯定不real 了,因为我们都活在梦里,所以咱们 ...

  5. python获取指定目录下的所有指定后缀的文件名

    使用到的函数有: os.path.splitext():分离文件名与扩展名 os.path.splitext(file)[] 获得文件名 os.path.splitext(file)[] 获得文件扩展 ...

  6. SQL列中含有换行符的查找和替换方法

    最近在获取数据时,发现程序读取的字段中含有\r\n字符,检查数据库表中的数据,发现是varchar字符串中包含了换行符.导入数据导致了这一情况出现. 回车换行 不同系统的行结尾符号并不同,如下: li ...

  7. COM学习(三)——COM的跨语言

    COM是基于二进制的组件模块,从设计之初就以支持所有语言作为它的一个目标,这篇文章主要探讨COM的跨语言部分. idl文件 一般COM接口的实现肯定是以某一具体语言来实现的,比如说使用VC++语言,这 ...

  8. MySQL两阶段提交

    参数介绍 innodb_flush_log_at_trx_commit 0: 每隔1s,系统后台线程刷log buffer,也就是把redo日志刷盘,这里会调用fsync,所以可能丢失最后1s的事务. ...

  9. ComboBox 中 DisplayMember 和 ValueMember 都是具体干什么的?

    ComboBox组件的数据绑定,在得到数据集后,只有设定好ComboBox组件的的三个属性就可以完成数据绑定了,这三个属性是:"DisplayMember". "Valu ...

  10. jqueryui sortable拖拽后保存位置

    jqueryUI sortable 可以用来进行页面拖拽布局,然而有一个小问题就是拖拽后如何保存状态. 工作中遇到了这个情况,遍把这个问题记了下来,具体思路是: 利用拖拽stop后利用   var a ...