Webpack基础学习(一) (未完结)
一、Webpack介绍与基本使用
1.1、Webpack是什么?
Webpack 是一个静态资源打包工具。
它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去。
输出的文件就是编译好的文件,就可以在浏览器段运行了。
我们将 Webpack 输出的文件叫做 bundle。
1.2、功能介绍
开发模式:仅能编译 JS 中的
ES Module语法生产模式:能编译 JS 中的
ES Module语法,还能压缩 JS 代码
1.3、开始使用
1.3.1、资源目录
webpack_code # 项目根目录(所有指令必须在这个目录运行)
└── src # 项目源码目录
├── js # js文件目录
│ ├── count.js
│ └── sum.js
└── main.js # 项目主文件
1.3.2、创建文件
项目结构:创建了一个空的根目录,在根目录下面创建一个 src 目录,src 目录下是main.js(入口文件)和 js目录(包含了count.js、sum.js)
创建 count.js 代码如下:
export default function count(x, y) {
return x - y;
}
sum.js 代码如下:
// 可变参数
export default function sum(...args) {
return args.reduce((p, c) => p + c, 0);
}
main.js 代码如下:
import count from "./js/count";
import sum from "./js/sum"; console.log(count(2, 1));
console.log(sum(1, 2, 3, 4));
1.3.3、下载依赖
初始化 package.json,生成一个基础的 package.json 文件,命令如下:
npm init -y
下载依赖 webpack 和 webpack-cli 命令如下:
npm i webpack webpack-cli -D
下载完依赖后,项目总体结构:

1.3.4、使用 Webpack
开发模式:
npx webpack ./src/main.js --mode=development
生产模式:
npx webpack ./src/main.js --mode=production
解析:
npx webpack: 是用来运行本地安装 Webpack 包的
./src/main.js: 指定 Webpack 从 main.js 文件开始打包,不但会打包 main.js,还会将其依赖也一起打包进来
--mode=xxx:指定模式(环境)
打包成功后:默认 Webpack 会将文件打包输出到 dist 目录下,我们查看 dist 目录下文件情况就好了

查看运行结果:在根目录下面,创建一个public目录,新建一个HTML文件,导入dist 目录下已经打包好的js文件<script src="../dist/main.js"></script>,运行查看结果

1.3.5、注意
- 默认
Webpack会将文件打包输出到dist目录下,我们查看dist目录下文件情况就好了 Webpack本身功能比较少,只能处理js资源
二、Webpack的基本配置
2.1、Webpack 的5大核心概念
entry(入口)
- 指示 Webpack 从哪个文件开始打包
output(输出)
- 指示 Webpack 打包完的文件输出到哪里去,如何命名等
loader(加载器)
webpack 本身只能处理 js、json 等资源,其他资源需要借助 loader,Webpack 才能解析
plugins(插件)
扩展 Webpack 的功能
mode(模式)
主要由两种模式:
- 开发模式:development
- 生产模式:production
2.2、准备Webpack 配置文件
在项目根目录下新建文件:webpack.config.js
module.exports = {
// 入口
entry: "",
// 输出
output: {},
// 加载器
module: {
rules: [],
},
// 插件
plugins: [],
// 模式
mode: "",
};
注意:Webpack 是基于 Node.js 运行的,所以采用 Common.js 模块化规范!
2.3、解析Webpack 配置文件
// Node.js的核心模块,专门用来处理文件路径
const path = require("path"); module.exports = {
// 入口
// 相对路径和绝对路径都行
entry: "./src/main.js",
// 输出
output: {
// path: 文件输出目录,必须是绝对路径
// path.resolve()方法返回一个绝对路径
// __dirname 当前文件的文件夹绝对路径
path: path.resolve(__dirname, "dist"),
// filename: 输出文件名
filename: "main.js",
},
// 加载器
module: {
rules: [],
},
// 插件
plugins: [],
// 模式
mode: "development", // 开发模式
};
运行命令:npx webpack
三、模块转换器 —— Loader
3.1、为什么需要用 Loader ?
- 处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)
Loader 是对应用程序中资源文件进行转换。它们是(运行在 Node.js 中的)函数,可以将资源文件作为参数的来源,然后返回新的资源文件
Webpack 本身是不能识别样式资源的,所以我们需要借助 Loader 来帮助 Webpack 解析样式资源
- Loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL;loader 甚至允许你直接在 JavaScript 模块中 import CSS文件!
3.2、官网文档
Webpack 官方 Loader 文档:webpack 中文文档 (docschina.org)
3.3、loader 的两个属性
test属性,识别出哪些文件会被转换。use属性,定义出在进行转换时,应该使用哪个 loader。- 举栗说明:
const path = require('path'); module.exports = {
output: {
filename: 'my-first-webpack.bundle.js',
},
module: { // 可以写多个规则
rules: [
{
test: /\.txt$/,
use: 'raw-loader'
},
{
test: /\.jpg$/,
use: {
loader: 'file-loader'
}
}
], },
}
3.4、loader特性
loader 支持链式调用。链中的每个 loader 会将转换应用在已处理过的资源上。一组链式的 loader 将按照相反的顺序执行。链中的第一个 loader 将其结果(也就是应用过转换后的资源)传递给下一个 loader,依此类推。最后,链中的最后一个 loader,返回 webpack 所期望的 JavaScript。
loader 可以是同步的,也可以是异步的。
loader 运行在 Node.js 中,并且能够执行任何操作。
loader 可以通过
options对象配置(仍然支持使用query参数来设置选项,但是这种方式已被废弃)。除了常见的通过
package.json的main来将一个 npm 模块导出为 loader,还可以在 module.rules 中使用loader字段直接引用一个模块。插件(plugin)可以为 loader 带来更多特性。
loader 能够产生额外的任意文件。
3.5、使用 loader 的三种方式
配置方式(推荐):在 webpack.config.js 文件中指定 loader
- module.rules 允许你在 webpack 配置中指定多个 loader。 这是展示 loader 的一种简明方式,并且有助于使代码变得简洁
module: {
rules: [
{
test: /\.css$/,
use: [
{ loader: 'style-loader' },
{
loader: 'css-loader',
options: {
modules: true
}
}
]
}
]
} Loaders的配置包括以下几方面:
test:一个用以匹配loaders所处理文件的拓展名的正则表达式(必须)
loader:loader的名称(必须)
include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选)
query:为loaders提供额外的设置选项(可选)
- module.rules 允许你在 webpack 配置中指定多个 loader。 这是展示 loader 的一种简明方式,并且有助于使代码变得简洁
内联方式:在每个
import语句中显式指定 loader- 可以在
import语句或任何 与 "import" 方法同等的引用方式 中指定 loader。使用!将资源中的 loader 分开,每个部分都会相对于当前目录解析。import Styles from 'style-loader!css-loader?modules!./styles.css';
- 通过为内联
import语句添加前缀,可以覆盖 配置 中的所有 loader, preLoader 和 postLoader:- 使用
!前缀,将禁用所有已配置的 normal loader(普通 loader)import Styles from '!style-loader!css-loader?modules!./styles.css';
- 使用
!!前缀,将禁用所有已配置的 loader(preLoader, loader, postLoader)import Styles from '!!style-loader!css-loader?modules!./styles.css';
- 使用
-!前缀,将禁用所有已配置的 preLoader 和 loader,但是不禁用 postLoadersimport Styles from '-!style-loader!css-loader?modules!./styles.css';
- 使用
- 选项可以传递查询参数,例如
?key=value&foo=bar,或者一个 JSON 对象,例如?{"key":"value","foo":"bar"}。
- 可以在
- CLI方式:在 shell 命令中指定它们
webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader'
这会对 .jade 文件使用 jade-loader,对 .css 文件使用 style-loader 和 css-loader。
3.6、
Webpack基础学习(一) (未完结)的更多相关文章
- Webpack基础学习
Webpack基础学习:https://segmentfault.com/a/1190000008853009
- react+webpack基础学习配置
最近学习react,公司的项目是使用create-react-app来搭建的,而我想重新使用node+mysql+react来搭建一个新的博客. 今天尝试从零开始搭建一个webpack+react项目 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- 学习webpack基础笔记01
学习webpack基础笔记 1.webpack搭建环境最重要的就是如何使用loader和plugins,使用yarn/npm安装插件.预处理器,正确的配置好去使用 2.从0配置webpack - 1. ...
- webpack从0到1超详细超基础学习教程
概念 自己是一个一听到webpack就头大,看着一堆不知道那是什么玩意的东西总觉得自己做好前端就行了,但是在使用vue-cli的时候总觉得要改其中的一些东西进行项目初始化的时候能够更好使用!所以想要根 ...
- Yaf零基础学习总结4-Yaf的配置文件
在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...
- C#/.NET 基础学习
初识C# C#是微软公司发布的面向对象的.运行于.NET Framework之上的高级程序设计语言.与Java有着明显不同,借鉴Delphi的特点,与COM(组件对象模型)直接集成,是微软公司 .NE ...
- 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)
前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...
- JavaScript 基础学习1-day14
JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...
- R基础学习
R基础学习 The Art of R Programming 1.seq 产生等差数列:seq(from,to,by) seq(from,to,length) for(i in 1:length(x) ...
随机推荐
- 洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包
本文学习自洛谷社区 喜提CCPC2021网络赛原题 题意相当于是要在每一列中选若干个砖块打掉,消耗所需的子弹数并得到对应的得分.最大化k个子弹能得到的最大得分. 预处理出第 \(i\) 列 \(j\) ...
- Educational Codeforces Round 96 (Rated for Div. 2) (A - C题个人题解)
因为火锅导致错过的上分机会,赛后发现人均AC5题 1430A. Number of Apartments 暴力搜索 #include<bits/stdc++.h> using namesp ...
- 如果很好说出finalize用法,面试官会认为你很资深
我在面试Java候选人的时候,有时候会通过finalize问及候选人在JVM方面的技能,一般的问法是:你知不知道finalize方法,在项目里有没有重写过这个方法?在本文里就将详细来说下这个知识点. ...
- java进阶(21)--集合基础
一.基本概念 1.数组其实是一个集合,二集合是一个容器 2.集合不能直接存储基本数据类型,也不能存java对象,存储的是引用数据类型 list.add(100); //自动装箱Integer 3.ja ...
- Tomcat 与 JVM 中classpath的理解和设置总结
本文为博主原创,转载请注明出处: 1.介绍 classpath是java运行时环境搜索类和其他资源文件(比如jar\zip等资源)的路径.类路径告诉JDK工具和应用程序在哪里可以找到第三方和用户定义的 ...
- jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
本文为博主原创,未经允许不得转载 1.jvisualm 的使用 打开 jdk 安装目录bin目录下的 jvisualvm.exe 工具 2. visual GC插件的安装及监控分析 Visual GC ...
- APB Slave设计
APB Slave位置 实现通过CPU对于APB Slave读写模块进行读写操作 规格说明 不支持反压,即它反馈给APB的pready信号始终为1 不支持错误传输,就是说他反馈给APB总线的PSLVE ...
- 【转】嵌入式C语言代码优化方案
来源:嵌入式C语言代码优化方案(深度好文,建议花时间研读并收藏) (qq.com) 1.选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使 ...
- Go-包-package-modules-import
- Springboot开发的应用为什么这么占用内存
Springboot开发的应用为什么这么占用内存 Java的原罪 Java 程序员比 c或者是c++程序员相比轻松了很多. 不要管理繁杂的内存申请与释放,也不用担心因为忘记释放内存导致很严重的内存泄漏 ...