Webpack新手入门教程(学习笔记)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 30.0px Helvetica; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "PingFang TC Semibold"; color: #000000 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang TC"; color: #000000 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #000000 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica; color: #000000 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { }
span.s2 { font: 30.0px "PingFang TC" }
span.s3 { font: 16.0px Helvetica }
span.s4 { font: 16.0px "PingFang TC" }
span.s5 { font: 11.0px "Hiragino Sans GB" }
span.s6 { font: 11.0px Helvetica }
span.s7 { font: 11.0px "PingFang TC" }
span.s8 { font: 11.0px "PingFang SC" }
span.Apple-tab-span { white-space: pre }

Webpack入门教程(学习笔记)

1、简介

此教程涉及不深入,并除去了很多复杂的东西,记录也坚持以最简单为主,让初学者大概对webpack有一个简单的系统认识,更好的去进一步深入学习webpack。

Webpack是一个Javscript的打包程序,webpack会自动分析每个模块之间的依赖,然后将这些依赖统一打包成一个或多个文件。

webpack最强悍的地方是可以通过官方、第三方的插件以及加载器(loader)来实现对各种文件的解析、编译。

Webpack最重要的四个核心概念:入口(entry)、输出(output)、加载器(loader)、插件(plugin),下面我以做笔记的方式尽量说明几个概念的意思,如果想深入或者笔记中有不太明白的地方,可以到官方网站的文档中去查看。

2、入口(entry)

webpack的入口就相当于一个网页的index文件,有了入口文件,这样webpack才知道从何下手,webpack会根据这个入口文件去分析入口文件所依赖的所有文件,然后将这些所有的依赖文件打包成一个或者多个文件。

webpack提供了单个入口语法、对象语法。单个入口语法也是最简单的一种,只有一个入口文件,即一个进一个出。比如下面的这一种。

1 {
2   entry: ‘./index.js‘
3 }

对象语法主要是针对多个页面的应用程序,告诉webpack有三个入口文件,当打包完成的时候也是三个文件,这三个文件相互独立,每个文件只包含自己所依赖的文件。比如下面这样:

1  {
2   entry: {
3    hello1: ‘./hello1.js‘,
4    hello2: ‘./hello2.js‘
5   }
6  }

3、输出(output)

webpack提供了output属性,来控制webpack如何把编译好的文件写入到硬盘中,输入和输出是对应的,有输入就有输出。但是必须注意一点,可以存在多个输入,但是只能存在一个输出,那怎么来输出多个独立的编译好的文件呢?webpack中当然有应对的机制。

webpack要求output属性为对象,并且必须包含两个属性:filename、path。顾名思义filename即输出文件的文件名,而path则为输出文件的绝对路径(注意,path必须为决定路径)。

单个入口output属性写法:

1 {
2     entry: ‘./index.js‘,
3     output: {
4       path: path.resolve(__dirname, ‘app‘), //path为nodejs自身的库。__dirname为nodejs在运行过程中的一个环境变量,里面是当前文件夹的完整目录名。resolve方法是把相对路径的app目录解析为一个决定路径。
5
6      filename: ‘bundle.js‘
7  }
8 }

webpack内置了多个变量来应对多个入口文件,如[name]、[hash]、[id]、[chunkhash],通过变量来保证每个文件的唯一性来达到生成多个文件,在生成过程中webpack会把这几个变量替换为相应的字符串用于保证文件的唯一性。

多个入口output属性写法:

1 {
2     entry: ‘./index.js‘,
3     output: {
4         path: path.resolve(__dirname, ‘app‘),
5         filename: [name]-[hash]-bundle.js
6      }
7 }

4、加载器(loader)

loader可以对不同类型的文件进行编译转换,比如jsx、typescript直接拿在浏览器上运行是不能运行的,那么我们在编写程序的时候需要借助jsx以及typescript等高效的库来提高我们编写程序的效率,但是我们又需要能正常使用,如果每种文件类型我们都通过一种转换工具,那么就显的很麻烦,所以laoder就是来处理这样的工作。

首先在使用loader的时候我们需要安装相应的插件,比如es2015,那我们安装babel-loader,如果是css,那我们安装css-loader,通过下面的module属性里面的rules数组来对需要转换的文件设置loader。

 1 {
 2     entry: ‘./index.js‘,
 3     output: {
 4         path: path.resolve(__dirname, ‘app‘),
 5         filename: [name]-[hash]-bundle.js
 6     },
 7     module: {
 8         rules : [
 9             {test: /\.js$/, use: ‘babel-loader‘}
10          ]
11      }
12 }        

上面的rules是一个数组,每个元素是一个对象,对象里面包含了两个属性test、use,test的值是一个正则表达式,它的作用是将当前loader用于什么文件,这里正则表达式就是用来匹配你需要转换的文件类型,use是当前匹配到的文件用什么加载器来转换、编译。

有三种方式来使用loader加载器

1、webpack配置文件

2、require语句中使用

3、通过命令行使用

第一种上面我们已经说了,下面简单的介绍一下第二种和第三种,第二种使用方法是我们在require或者import文件的时候可以直接使用,比如下面的代码:

1 require(‘babel-loader!./hello.js‘)

或者

1 Import(‘babel-loader!./hello.js‘)

第三种方式是直接通过webpack提供的命令行工具—module-bind使用,比如下面的代码:

1 webpack —module-bind ‘js=babel-loader‘

5、插件(plugin)

插件用于解决loader无法解决的事情,比如给每个js文件进行添加著作标记、压缩文件等功能,每个插件都可能有参数选项,每个插件在使用的时候也必须使用new操作符来建立一个插件的实例。插件通过plugins属性来设置,plugins是一个数组,每个元素代表一个插件的实例。因为插件有官方的还有第三方的,所以不会一一去说怎么使用,只是给大家简单演示一下,大家需要用到哪个插件再去查这个插件的api。

 1 const HtmlWebpackPlugin = require(‘html-webpack-plugin‘);
 2 //首先要使用插件,必须先引入插件
 3
 4 {
 5   entry: ‘./index.js‘,
 6   output: {
 7    path: path.resolve(__dirname, ‘app‘),
 8    filename: [name]-[hash]-bundle.js
 9    },
10   module: {
11     rules : [
12        {test: /\.js$/, use: ‘babel-loader‘}
13     ]
14    },
15    plugins: [
16     new HtmlWebpackPlugin({telmplate : ‘./index.html‘})  //通过plugins来使用你需要使用插件。
17    ]
18 }

6、总结

通过上面的学习,你可以了解到webpack的四个核心,入口、输出、加载器、插件,入口就是你要编译的是哪个文件,指定了过后webpack会自行寻找依赖的文件打包编译。输出就是编译转换好了过后把文件写入到硬盘的哪里。加载器就是对不同类型的文件转换,从而让浏览器能直接运行。插件做的是loader无法解决的事情。

其实webpack的配置并没有想象中的那么复杂,webpack的配置文件就是一个js文件,只要对webpack有一个系统的认识后,你就知道我该从哪里下手,该从哪里入手了。

时间: 2024-10-05 04:19:22

Webpack新手入门教程(学习笔记)的相关文章

python入门教程学习笔记#2

2.1 python3.6 工具使用 运行python 自带的idle后,输入python命令,如print('hello world'),回车后输出 hello world 其中mac系统会出现一段warning :the version of tcl/tk in use may be ustable.提示当前不稳定,会出现无法输入中文,需下载安装更新tcltk. 2.2 pycharm 的工具使用 初次使用时,需勾选默认配置环境,新建立一个项目,取名为自定义1,并配置编译环境(interpr

python入门教程学习笔记#3 基础部分

3.1 数据类型 Number(数字) int.float.bool.complex(复数)int,表示为长整型,没有 python2 中的 Long.在 Python2 中是没有布尔型的,它用数字 0 表示 flase String(字符串)Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠(\)转义特殊字符 3.2 数据结构 列表,用[]表示,列表可用于索引和截取等很多方法.list=[a,b,1,2,3,4] 元组,元组不可更改,用()表示,元素之间用逗号隔开.tup

gulp的使用以及Gulp新手入门教程

Gulp新手入门教程 原文  http://w3ctrain.com/2015/12/22/gulp-for-beginners/ Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript.压缩图片 当然Gulp能做的远不止这些.如果你够疯狂,你甚至可以使用它搭建一个静态页面生成器.Gulp真的足够强大,但你必须学会驾驭它. 这是这篇文章的主要目的.帮助你了解Gu

【LaTeX】E喵的LaTeX新手入门教程(5)参考文献、文档组织

这不是最后一篇,明天开始建模所以会从6号开始继续更新.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版 [LaTeX]E喵的LaTeX新手入门教程(3)数学公式 [LaTeX]E喵的LaTeX新手入门教程(4)图表参考文献天下文章一大抄,抄来抄去有提高. ——白岩松常备工具:JabRef>>戳我下载<<JabRef是一款管理参考文献用的软件,相当好用.装好了以后在选项中把这两个选项改成如图示的样子.*nix用户

SQL语句教程学习笔记之一

转自http://www.1keydata.com/cn/sql/ 无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将, 您就来对地方了.这个 SQL 教材网站列出常用的 SQL 指令.包含以下几个部分: SQL 指令: SQL 如何被用来储存.读取.以及处理数据库之中的资料. 表格处理: SQL 如何被用来处理数据库中的表格. SQL语法: 这一页列出所有在这个教材中被提到的 SQL 语法. 对于每一个指令,我们将会先列出及解释这个指令的语法,然后我们会用一个

安卓自动化测试(2)Robotium环境搭建与新手入门教程

Robotium环境搭建与新手入门教程 准备工具:Robotium资料下载 知识准备: java基础知识,如基本的数据结构.语法结构.类.继承等 对Android系统较为熟悉,了解四大组件,会编写简单的Android应用程序 熟悉Eclipse IDE使用方法 有足够的耐心与探索精神,遇到问题可以熟练的Google 环境搭建 安装jdk,配置环境变量,如果不会请自行Google 下载安装Android SDK,并更新 下载Eclipse,并安装ADT插件,集成Android SDK Roboti

C语言/C++编程新手入门基础学习中链接类型

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制).创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学C++能够持之以恒C++爱好群,如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组

【LaTeX】E喵的LaTeX新手入门教程(2)基础排版

换了块硬盘折腾了好久..联想的驱动真坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇文档框架嗯昨天我们已经编写了一个最基本的文档,其内容是这样的:\documentclass{article}\begin{document}XXX is a SB.\end{document}这个文档呢其实是分为两部分的:一部分是\begin{document}之前的那部分也就是第一行,这一部分我们称之为导言区.导言区的内容可以不只一行,它的作用是完成文档的基础设定.比如在这个文档中,我们使用

【LaTeX】E喵的LaTeX新手入门教程(3)数学公式

昨天熄灯了真是坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版上一期测试答案1.大家一开始想到的肯定是\LaTeX{}er.其实\LaTeX er也可以的.2.\LaTeX{} er或\LaTeX\ er数学模式现在我们打算在文档中插入一些数学公式什么的了:按照正常的情况来说,数学公式里面的字符一般都是斜体,而我们要用\textit来一点点把需要变的文字变成斜体这显然是一件极其坑爹的事情.TeX的创造者高爷爷表示他搞T