Jacky's blog Jacky's blog
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Jacky Wang

行到水穷处,坐看云起时
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术随笔

    • git教程
    • 前端模块化:CommonJS,AMD,CMD,ES6
    • 如何动态加载本地图片
    • GitHub自动部署脚本
    • React生命周期详解
    • 将父组件的props作为组件的初始state的几种方案
    • webpack基础入门
      • 一、前言
      • 二、环境配置+快速上手
      • 三、入门案例上手:如何让浏览器识别 import语法?
      • 四、如何看webpack官网
        • 入口|出口
        • plugin的使用
        • loader的使用
      • 五、Webpack-dev-server的学习
      • 六、如何区分生产模式和开发模式下的config文件
    • StackOver记录:如何在function中使用redux
    • React中使用onClick时的三种性能优化
    • 思考React状态管理
    • forEach/for..in/of
    • styled-components使用记录
    • 深入理解forEach与forof
    • Node技术架构
    • Redux、Mobx状态管理杂谈
    • JS中的类型检测
    • 如何判断图片是否在可视区域
    • 如何使用图片的懒加载操作
    • JavaScript模块化:从CommonJS到AMD
    • git查看:修改用户名、密码
    • 保持数据Immutable的几种写法
    • 如何实现一个Promise.all
    • resolve(Promise对象)会多出两个微任务
    • todo_基于Mocha的测试驱动开发
    • 浏览器页面渲染机制
    • todo-响应式编程之数据劫持
    • todo-immer库的介绍
    • React-Hooks 基础原理解析
    • JS基本功
    • 函数闭包与this指针
    • 收集 DUMI 配置过程中遇到的问题
    • typescript 类型工具
    • 统一接口的导入导出
    • 网络安全:如何预防 XSS 攻击
    • 浏览器页面渲染机制【2023】
    • 跨域资源请求
    • 浏览器事件循环机制
    • 如何理解浏览器的 user agent 用户代理的含义?
  • 转载文章

  • Mac相关

  • 前端学习周报

  • 包管理工具

  • 技术随笔
  • 技术随笔
wangjiasheng
2021-12-14
目录

webpack基础入门

# 一、前言

本篇博客就是对webpack做一个简单的入门,虽然这些文档很简单,由于没有实际操练的机会,所以这些知识点反复记反复忘。

本篇博客的主要目的:

就是为了稍微看懂:webpack官网给的配置文件 (opens new window),但是webpack.config.js配置选项太多,核心的目标是看懂cra的配置方案,但这远远不是一片博客能做到的,下面就正式开始对webpack的学习。

# 二、环境配置+快速上手

# 1. 本地安装webpack
webpack@4.41.2
webpack-cli@3.3.10
webpack-dev-server@3.9.0
# 注: webpack 与 webpack-cli 不是同一个东西,版本号也不相同

# 2. 创建文件
# 如 touch index.js | echo "console.log(’123‘)" > index.js

# 3. 使用webpack打包(两种方式)
# 3.1 调用bin文件中的内容
./node_modules/.bin/webpack -v
4.46.0

# 3.2 简化写法:调用npx
npx webpack -v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

这边遇到一个小问题:

之前的webpack入门案例的教程已经写好了,只不过是在windows系统上写的,但是Mac上面总是报错:找不到这个函数,这个原因找到了:

对于可执行文件,必须要给文件夹添加权限。

需要添加权限:chmod -R 777 ./node_module/.bin

# 三、入门案例上手:如何让浏览器识别 import语法?

  1. 问题描述:浏览器无法识别import语法。

  2. webpack打包后的结果那为啥能成功运行呢?

  3. 原因:做了一层静态分析,直接帮你运行翻译后的结果。

    // x.js
    export default 'xxx'
    
    // index.js(webpack默认的打包入口:index.js)
    import x from 'x.js'
    console.log(x)
    
    1
    2
    3
    4
    5
    6

    index.js文件经过 webpack 打包后只会保留下面这段代码:

    console.log('xxx')
    
    1

# 四、如何看webpack官网 (opens new window)

编号 简写 简介
1 API 这块主要介绍的是wepack,wepack-cli,webpack-dev-server命令
也可以直接在命令行输入wepack --help查看。
2 概念 这一块就是概念:名词解释+基础使用方法
3 配置 webpack.config.js
4 指南 新手入门文档,也是本篇博客干的事情,建议看官方文档。
5 loader 官方推荐loader
6 Plugin 官方推荐Plugin
7 版本 版本切换

# 入口|出口

// webpack.config.js
var path = require('path')

// 使用 node 的语法(commonJS模块化)编写
module.exports = {
  mode:'development',
  entry: './src/index.js',
  output: {
    filename: '[name].[contenthash].bundle.js' // 可以使用占位符 format
  }
  
}
1
2
3
4
5
6
7
8
9
10
11
12

取名Hash名称的原因:

  1. 内容与文件名一一对应。

  2. 涉及到HTTP缓存:

    index.html会依赖很多css资源,如果有缓存能提高缓存速度,如果资源变了,就会立刻去请求新的资源。

    注:首页是绝对不能做缓存的。

# plugin的使用

# loader的使用

导入css文件需要用到两个插件

  • css-loader:将css文件读入到js代码中

    // 验证:
    import css from './x.css'
    console.log(css.toString())
    
    1
    2
    3
  • style-loader:将css写入到html的style标签下


以上是开发状态下的使用,但是在生产环境下,我们还是希望生成一个新的css文件,需要使用插件,如new MiniCssExtractPlugin()

# 五、Webpack-dev-server的学习

吐槽一下,webpack的官网,一开始找不到如何去配置这个运行环境

API中的webpack-dev-server api只是教你如何在node的方式另启一个服务器,这个server.js该如何去写。

但是webpack这部分工作已经帮你做好了,直接配置webpack.config.js就OK了,

官网查找的位置在:配置->左侧栏的DevServer

网址:https://webpack.docschina.org/configuration/dev-server/

使用时:npx webpack serve

当然,比如说我们希望调用一起其余的option,例如:启动默认的浏览器

npx webpack --open

具体的有什么参数可以直接在命令行输入npx webpack server -h

或者官网也给出了参考文件:https://github.com/webpack/webpack-cli/blob/master/SERVE-OPTIONS-v4.md

# 六、如何区分生产模式和开发模式下的config文件

// webpack.config.prod.js
// webpack.config.dev.js

// 在package.json 中打包时:
scripts: {
	"build": "rm -rf dist && webpack --config webpack.config.prod.js"
}

// 以上命令可通过 npx webpack -h 找到
1
2
3
4
5
6
7
8
9

如何使用两个文件,可以使用...扩展符,本质上就是commonJs模块化语法

// webpack.config.base.js
module.exports = {
  mode: ""
  plugins: [
  	....
  ]
}

// webpack.config.prod.js 继承base中的内容
const base = require('./webpack.config.base.js') // 本身就是 commonjs语法
module.exports = {
  ...base, // 第一层嵌套
  mode: "production",
  plugins: [
    ...base.plugins // 第二层嵌套
    new MiniCssExtractPlugin({...})
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
#webpack
上次更新: 2022/04/06, 15:04:00
将父组件的props作为组件的初始state的几种方案
StackOver记录:如何在function中使用redux

← 将父组件的props作为组件的初始state的几种方案 StackOver记录:如何在function中使用redux→

最近更新
01
如何理解浏览器的 user agent 用户代理的含义?
11-05
02
浏览器事件循环机制
10-31
03
浏览器页面渲染机制【2023】
10-15
更多文章>
Theme by Vdoing | Copyright © 2020-2023
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式