👨‍💻
Hong's 前端笔记
  • 🌈About
  • JavaScript
    • 作用域
    • 闭包
    • this
      • bind()
    • 原型
      • Object.create()
      • 模拟“类”
      • ES6 Class
      • Function
    • 对象
    • 类型 & 值
      • 原生函数
      • 数组
      • 字符串
    • 异步
    • JavaScript 相关概念
      • Event Loop 事件循环
      • Prototype 原型
      • Context 执行上下文
      • this
      • Promise
    • JavaScript 常见问题
      • 手写实现
      • 看代码输出
  • React
    • 核心概念
    • 深入理解
      • State
      • 如何管理 State
      • React 渲染过程
      • 处理 DOM 事件
      • Pure 组件
      • Context
      • Key 属性
      • React.lazy()
      • Render Props
    • Hooks
      • useState
      • useRef
      • useEffect
        • Some details
      • 相关概念
      • 自定义 Hook
      • useEffect vs useLayoutEffect
    • React 相关问题
      • Class vs Function
  • React Libraries
    • Redux
      • Quick Start
      • 如何持久化 Redux 数据
      • 异步操作
      • 性能优化
      • Dive into immutability
    • Route v6
      • Quick Start
  • Reactivity
    • Immer
  • Vue
    • 深入理解
      • Composition vs Options
      • Reactivity
  • Network
    • Cookies
    • HTTP
    • HTTPS
    • CORS 跨域资源共享
    • 认证手段
    • 安全相关
    • 网络相关知识
  • Browser
    • DOM 操作
    • Events 事件
    • XHR & Fetch
    • 性能优化
    • HTML 相关概念
    • 浏览器相关概念
  • CSS
    • 盒模型
    • Layout 布局
    • Styles 样式
    • CSS 相关概念
    • CSS 相关技巧
      • 移动端适配
      • Flex
      • 动画
  • TypeScript
    • Quick Peek
    • Types in TypeScript
    • Narrowing
    • Functions in TypeScript
  • Workflow
    • Webpack
      • Webpack 概念
      • 资源管理
      • 管理输出
      • 开发环境配置
      • 生产环境配置
      • 优化代码运行性能
  • Others
    • 小程序与原生 Web 的区别
  • SSO
    • About
    • API Doc
    • 接入指南
Powered by GitBook
On this page
  • Webpack Dev Server
  • HMR 模块热加载
  • source map
Edit on GitHub
  1. Workflow
  2. Webpack

开发环境配置

Webpack Dev Server

yarn add -D webpack-dev-server

webpack.config.js

module.exports = {
  ...,
  devServer: {
  	static: './dist',  // 将 dist 目录下的文件 serve 到服务器上
  	port: xxxx,
  	open: true				// 自动打开浏览器
  }
}

Webpack Dev Server 只是将编译后的文件保存在内存中,并不真实输出至磁盘中

不妨在 package.json 中增加一个脚本

"start": "webpack serve --open"

HMR 模块热加载

⚠️ HMR 只适用于开发环境

module.exports = {
  ...,
  devServer: {
  	...,
    hot: true,
  }
}

从 webpack-dev-server v4.0.0 开始,热模块替换是默认开启的。

style-loader 默认支持 HMR

js 支持 HMR

在 index.js 中:

import xxxFoo() from './xxx.js'

if (module.hot) {
   module.hot.accept('./xxx.js', function() {
     xxxFoo()	// xxx.js 中的某一方法
   })
}

这样,xxx.js就会被监听,如果文件内容发生改变,就会重新调用 xxxFoo()

⚠️ 入口文件 index.js 不支持热加载,但是在 index.js 引入的其他 js 模块是可以支持热加载的

source map

将源代码和构建后的代码进行映射,使得在出错是可以定位到错误在源代码中的位置

在 webpack.config.js 中:

module.exports = {
  ...,
  devtool: 'source-map'
}

不同的 source map

💡 不同的 source map 会明显影响到 build 和重新构建 rebuild 的速度

​ https://webpack.docschina.org/configuration/devtool/

xxx-source -map
性能 (build/rebuild)
是否适用于 production
品质
备注

默认

最慢/最慢

✅

original

eval

最慢/尚可

❌

original

适合开发环境

cheap

尚可/慢

❌

transformed

inline

最慢/最慢

❌

original

适合发布单一文件

nosources

最慢/最慢

✅

original

不包含源代码

hidden

最慢/最慢

✅

original

没有引用,适用于仅需要错误报告的场景

品质
说明

original

能看到源代码

generated

能看到生成的代码,但是在开发者工具中每个模块都是独立的文件

transformed

只能定位到行,列信息会被忽略

development 下的选择

  • eval-source-map

    第一次构建较慢,但重构时速度还行。行数可以正确的映射

  • eval-cheap-source-map

    只有行,没有列的信息,可以提高性能

  • eval-cheap-module-source-map

    比上面的效果好一些,是一个折中

eval-cheap-module-source-map 是多数情况下的一个最佳选择

production 下的选择

  • 不使用 devtool

    不生成 source map,是一个不错的选择

  • hidden-source-map

    hidden-source-map - 与`source-map 相同,但不会为 bundle 添加引用注释。如果你只想 source map 映射那些源自错误报告的错误堆栈跟踪信息,但不想为浏览器开发工具暴露你的 source map,这个选项会很有用

  • nosources-source-map

    创建的 source map 不包含 sourcesContent(源代码内容)。它可以用来映射客户端上的堆栈跟踪,而无须暴露所有的源代码。你可以将 source map 文件部署到 web 服务器。(仍然会暴露反编译后的文件名和结构,但是不暴露原始代码)

Last updated 3 years ago