Webpack概念
webpack概念
我经常用 webpack,打算做一次比较详细的概念清点和梳理。从 0 配置 webpack,由于 webpack5(2019.07.27)暂时还没有发布。并且从Webpack Milestones上来看,截止到 7 月 27 日,完成度是 64%。有喜欢钻研的同学可以去研究一下 5,我的重点还是当前 4.X。
Hello World
由于是概念清点,先从最基础的开始。
mkdir webpack-test
cd webpack-test
npm init -y
npm i --save-dev webpack
接下来,新建一个src目录,创建index.js,然后在package.json的scripts下加入
"scripts": {
"webpack": "webpack"
}
接着在当前目录启动终端,输入
npm run webpack
这个时候就能看到webpack把src入口的index.js打包到dist目录下的main.js。
由于parcle宣传约定先于配置的火爆,webpack在 4.X 中也加入了默认配置,即如果没有webpack.config.js或者没有配置入口entry,则默认为src/index.js。同理,默认的输出outputs 是dist/main.js。
核心概念
webpack有五个概念需要了解。
entry
entry用来告诉webpack应该从哪个 JS 文件开始去寻找相关依赖,并且把它们打包成一个或者多个 bundle,最终输出到指定目录。默认值为./src/index.js,可以有多个 entry。常用的配置如下:
// 单文件
module.exports = {
entry: "./src/file1.js"
};
// 单文件数组,不常用,默认打到一个文件中
module.exports = {
entry: ["./src/file1.js", "./src/file2.js"]
};
// 将输出
// dist
// └── main.js
// 多文件对象,常用,会分entry入口打包,输出文件名为entry配置的key
module.exports = {
entry: {
file1: "./src/file1.js",
file22: "./src/file2.js"
}
};
// 将输出
// dist
// ├── file1.js
// └── file22.js
output
output就是用来指定把 bundle 输出到哪里的配置,默认值为./dist。
output有两个配置项:
- filename
filename 用于配置输出文件的文件名 - path
输出文件的绝对路径
// 默认配置
const path = require("path");
module.exports = {
output: {
filename: "main.js",
path: path.join(__dirname, "dist")
}
};
如果有多个入口,则可以使用占位符来指定文件名,或者添加 hash 等。
module.exports = {
output: {
filename: "[name].[hash:16].js",
path: path.join(__dirname, "dist")
}
};
loader
loader主要用来预处理各种文件。比如我们常用的babel-loader,css-loader。
在使用之前,需要先安装
npm install --save-dev css-loader style-loader
npm install --save-dev babel-loader @babel/core @babel/preset-env
为文件加入loader配置
module.exports = {
module: {
rules: [
{ test: /\.css$/, use: ["style-loader", "css-loader"] },
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"]
}
}
}
]
}
};
plugin
插件机制给webpack提供了更多自定义的能力。webpack的plugin具有apply方法,并且会在webpack编译时调用,通过在plugin对象中对webpack提供的各种hook做操作,达到我们修改bundle的目的。
官网的一个例子:
const pluginName = "ConsoleLogOnBuildWebpackPlugin";
class ConsoleLogOnBuildWebpackPlugin {
apply(compiler) {
compiler.hooks.run.tap(pluginName, compilation => {
console.log("webpack 构建过程开始!");
});
}
}
mode
mode比较简单,通常来说,有两种内置mode,development和production,可以通过webpack.config.js配置,或者通过CLI参数传递。
module.exports = {
mode: "production"
};
webpack --mode=production
设置了mode之后,nodejs进程中的process.env.NODE_ENV也会被同步设置。
webpack对于mode有一些自己的区分,在production模式下,会打开代码压缩、去除一些热更新的代码等,在生产环境中切记要将mode设置为production。
Webpack概念的更多相关文章
- Webpack 概念
概念 webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图表(dependency ...
- [WIP]webpack 概念
创建: 2019/04/09 概念 入口 指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始. 进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖 ...
- webpack——概念的引入
## 在网页中会引用哪些常见的静态资源?+ JS - .js .jsx .coffee .ts(TypeScript 类 C# 语言)+ CSS - .css .less .sass .scss+ I ...
- 1.WebPack概念
一.什么是WebPack 官方解释:本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构 ...
- Webpack 入门指迷--转载(题叶)
最近看到这个东西,一头雾水.看了一些资料了解了Webpack概念,大体是webpack 是一个模块绑定器,主要目的是在浏览器上绑定 JavaScript 文件. 看到题叶写的一篇介绍,写的很好,转载连 ...
- webpack3中文版使用参考文档--全面解析webpack.config.js
Webpack目前官方发布的最新版本是3.1.0,相对于2.0的怎么本,在语法上没有变动,只是新增了功能.使用webpack,需要事先安装node.js,并对node.js生态有一些基本的了解,比如( ...
- 理解 Gulp 和 Webpack(转)
Gulp 和 webpack 之间的关系是十分暧昧的,却也经常被人误解,以为它俩是竞争关系,其实不然. Gulp 是一个任务管理工具,让简单的任务更清晰,让复杂的任务易于掌控:而 webpack 的理 ...
- Webpack 打包工具
1. webpack 概念 [文档地址](https://www.webpackjs.com/concepts/) 2. webpack 命令使用及相关工具包 1. webpack 安装和打包命令: ...
- 转:Cesium 和 Webpack
原文地址:https://www.jianshu.com/p/85917bcc023f 注意:webpack 和 webpack-cli 的安装参考 https://www.cnblogs.com/m ...
随机推荐
- pytorch实现yolov3(1) yolov3基本原理
理解一个算法最好的就是实现它,对深度学习也一样,准备跟着https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-p ...
- 在前后端分离项目中使用SpringBoot集成Shiro
前言 这次在处理一个小项目时用到了前后端分离,服务端使用springboot2.x.权限验证使用了Shiro.前后端分离首先需要解决的是跨域问题,POST接口跨域时会预发送一个OPTIONS请求,浏览 ...
- Redis 学习笔记(篇二):字典
字典 字典又称为符号表.关联数组或映射(map),是一种用于保存键值对(key-value)的数据结构. 那么 C 语言中有没有这样 key-value 型的内置数据结构呢? 答案:没有. 说起键值对 ...
- Git 本地仓库(使用小乌龟进行操作,一个人开发)
一.首先在本地创建版本库 创建成功最明显的特征是该目录下存在一个隐藏文件夹(.git) 前提:已设置显示隐藏文件 三种方式: 1.Git GUI Here(右击) 2.Git Bash Here(右击 ...
- C# Winfrom 简单的运用Timer控件
注意,在使用DateAndTime时,需要添加引用 using Microsoft.VisualBasic;否则不可以计算时间之间的差值. using System; using System.Col ...
- 初步接触 Java Net 网络编程
本文目的是大概了解 Java 网络编程体系,需要一点点 Java IO 基础,推荐教程 系统学习 Java IO.主要参考 JavaDoc 和 Jakob Jenkov 的英文教程<Java N ...
- 【设计模式】行为型11解释器模式(Interpreter Pattern)
解释器模式(Interpreter Pattern) 解释器模式应用场景比较小,也没有固定的DEMO,中心思想就是自定义解释器用来解释固定的对象. 定义:给定一个语言,定义它的文法表示,并定义一个 ...
- 安装mysql apache php smb
1 SMB LinuX下SMB的配置 使用Smb进行连接的命令: smbclient //192.168.128.1/Share 今天要在LINUX之间以及LINUX与WINDOWS之间互相传送文件, ...
- Linux/windows com串口 java 接收数据 并解析 web程序
1.首先应公司要求再 com 口本来使用 .net 由于 .net 适用 linux 太麻烦 改为java 准备工作 准备 RXTXconmm.jar(版本很重要) 因为版本问题我搞了一天. 主要讲述 ...
- HDU 3068:最长回文(Manacher算法)
http://acm.hdu.edu.cn/showproblem.php?pid=3068 最长回文 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的 ...