webpack学习

webpack是什么

是一个模块打包器

模块化历史

  • CommonJS
    //moduleA.js
    exports.a = 1

//moduleB.js
var moduleA = require('./moduleA')

  • AMD
    // moduleA.js
    define (function(){
    return {
    name: A
    }
    })

// moduleB.js
require(['./moduleA'], function(moduleA){
console.log(moduleA.name)
})

  • ES6 Modules
    //moduleA.js
    let name = 'A'
    let age = 18
    export name
    export age
    //ES6中,export和import是关键字,使用这两个可以输出和引入模块

// moduleB.js
import name from './moduleA'
console.log(name)

Get started

  • webpack默认支持CommonJS、AMD、ES Modules

webpack.config.js学习

  • config.js是node的文件,浏览器是看不到的,只有开发者看得到

  • 配置文件的写法


    webpack.config.js

    说明:有了配置文件,就可以直接运行webpack,然后根据你配置的入口和输出位置来进行文件的打包,就不用像前面那样写一长串的命令行来指定要打包的文件,和输出的位置。

  • 运行配置文件


    修改scripts实现效果

    说明:这里只写webpack就能实现效果是因为有两个默认:1. 输入webpack,node会默认在当前目录的node_modules下寻找webpack工具包。 2. webpack会默认在当前目录下寻找webpack.config.js来作为它的配置文件。 因为有这两个默认的存在,可以直接通过webpack命令实现效果。

  • 引入变量


    引入其他模块的变量
  • 在ES6中,如果对象中的变量为name:name,那么可以直接写name作为对象中的变量

加载css

  • 直接在文件中引入css文件


    加载css

    结果报错


    报错

    原因:webpack不知道如何处理css
  • 通过加载loaders来加载css的处理模块


    image.png
  • 为什么js可以加载css


    image.png
  • webpack使用autoprefixer-loader


    加前缀

加载图片

index.js写法

1.配置图片处理loaders


配置loaders

2.缺少模块,进行安装


image.png

3.安装缺少的模块后,继续build,产生图片
生成图片
生成图片请求
生成img标签

压缩图片

  • 配置压缩工具


    配置压缩工具
  • 压缩完成后


    image.png

    大小对比

webpack --watch

  • 作用:使用watch后,会监视文件是否发生改动,每次发生改动,都会自动build一次,就不用自己输代码了


    windows中的写法

    在scripts中配置命令方便使用


    配置scripts

webpack 引用scss文件

  • 引入scss文件


    引入scss文件
  • 通过搜索loaders找到使用方法,在配置文件中写好loaders


    使用方法

    config配置
  • 安装loader


    安装loader
  • 执行build


    build

    提示缺少模块


    提示缺少模块
  • 安装node sass
    node sass是ruby社区发明的,但是node并没有完全重写这个模块,所以安装时有些注意事项

  1. 直接安装,开始前面的部分都正常,但最后有个地方有个文件的下载需要指定位置
    前面

    指定文件位置

    git bash中运行这一行代码指定下载位置 export SASS_BINARY_SITE="https://npm.taobao.org/mirrors/node-sass",然后再进行npm install node-sass来安装模块才能成功
  • less的loader的安装方法相同,有了这些后,甚至可以在项目中实现less和sass的混写

webpack Dev Server(自动刷新工具)

webpack-dev-server如果是3.x的话,webpack必须是4.x才不会报此TypeError: Cannot read property 'compile' of undefined错误, 同理如果webpack是3.x,则webpack-dev-server必须是2.x

  • 安装
    npm install webpack-dev-server --save-dev

  • 运行webpack dev server
    出现提示,项目在localhost8080下运行,此时打开这个地址,就能预览页面


    文件目录结构

    运行

    看看根目录下都有啥

    查看请求


    请求

    修改css,查看是否能自动刷新并查看效果
    出现问题
  • 解决前面出现的不能刷新效果的问题
    原因:首先,原因是我们访问的是dist目录,而其中的index.html引用的是dist目录下的bundle.js,这个文件是死的,也就是我们在修改css文件后,这个js文件是没有被重新build的,而根目录(也就是localhost:8080下)下的bundle.js是动态的,是活的,所以我们要引用这个js

  • 引用根目录下的bundle.js
    下图这种写法是在引用dist目录下的bundle.js,这个文件是死的。为什么呢?其实现在8080根目录下和dist目录下都有bundle.js,但是dist下的那个是死的,8080下这个是动态的,因为devserver会默认将你所有的静态资源都能在8080下访问到,只有一个bundle.js是动态的

    原来的写法

    下图这种写法在引用8080根目录下的bundle.js
    修改代码

    效果

  • 引用dist目录下的bundle.js

    dist目录下的bundle.js

总结:webpack-dev-server其实是会默认将当前目录的所有静态文件放到localhost下,但只有一个文件是动态的,就是默认的根目录下的bundle.js,所以需要引用localhost下的bundle.js,但是我们可以通过配置来实现依赖那个js文件

  • 没有指定入口文件,需要自己点选


    点选入口文件
  • 自己配置入口


    语法

    配置文件中的写法和位置


    配置文件详情

    效果

    这时修改文件后的自动刷新可以看见效果

webpack插件学习

自动生成HTML插件

  • 步骤
    1.先在配置文件中引入两个插件


    配置

    2.git安装两个插件


    安装插件

    3.语法
    语法

    配置文件中的具体写法

    4.删除dist中的index.html


    删除文件

    5.启动webpack-dev-server
    启动

    注意,这里使用了一个打开网页的插件,url的端口号要和dev-server配置的端口号一样
    端口号统一

    5.效果
    执行webpack-dev-server后,会自动新建一个服务器,然后编译代码,然后打开网页
    效果
  • 没有index.html,哪来的网页?


    网页代码

    功劳其实来自刚刚的两个插件


    插件功能解释

webpack代码部署、发布

  • 依赖的命令行
    webpack -p

  • 步骤
    1.运行webpack -p,生成html和js文件

    image.png

    2.git push上传代码
    image.png

    3.github上开启预览页面,实现预览

  • 发布后效果


    效果

    代码体积大大减小


    代码体积减小

几个补充

  • 回到最开始,webpack其实就是个打包器,就像刚刚上面所实现的,将所有东西,图片、js、css、html都打包成一个bundle.js,然后这些东西通过一个文件放到页面上。还有另一个概念,就是为模块化而生的打包器,就像我们刚刚生成的bundle,就是一个模块,它内部有自己的逻辑,也就是各个文件之间的逻辑,不受别人影响,也不影响别人,就是一个独立的模块,这样就让我们的代码条理清晰,不会出现写一个1000代码的js,而是10个100行代码的js。


    为模块化而生的打包器
  • bundle.js有问题
    这时的bundle.js还是从缓存中获取的,如果我们升级了呢?那用户还是用的旧的,所以应该加个哈希,让用户能保持最新的代码来使用


    bundle.js问题

添加步骤
1.在配置文件中输出的bundle.js后加上-[hash]

image.png

2.执行webpack -p,发现bundle.js多了哈希
image.png

3.修改文件,重新压缩,bundle.js的哈希也会发生变化
image.png

这样一来,用户既能快速访问旧的功能,但同时又能保持新的功能的更新

  • 为什么要自动生成html
    因为html引用的js是最新build的,如果自己维护,根本不知道哈希已经变成什么了


    image.png
  • 如果想在自动成的html中加东西怎么办?例如,我想加个meta,这个是有选项的,可查阅文档实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 6,645评论 0 16
  • http://blog.csdn.net/weizengxun/article/details/53448885 ...
    晓卢轩阅读 606评论 0 0
  • 本文主要分为:环境配置使用配置文件CSS 处理ES6 代码编辑文件压缩SASS 处理CSS 与 JS 分离文件处理...
    _月光临海阅读 492评论 0 1
  • Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境...
    stiller阅读 595评论 0 3
  • Webpack学习总结 此文只是自己学习webpack的一些总结,方便自己查阅,阅读不变,非常抱歉!! 下载安装:...
    Lxs_597阅读 936评论 0 0