Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)

简介: Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)



Webpack中模式(Mode)

提供 mode 配置选项,告知 webpack 使用相应模式的内置优化。

'none'| 'development' | 'production'
选项  描述
development 会将 DefinePluginprocess.env.NODE_ENV 的值设置为 development . 为模块
production 会将 DefinePluginprocess.env.NODE_ENV 的值设置为 production 。为模块和
FlagDependencyUsagePluginFlagIncludedChunksPluginModuleConcatenati
TerserPlugin 
none 不使用任何默认优化选项

实现模式(Mode)有两种方式:

第一种:只需在配置对象中提供 mode 选项

module.exports = {
 mode: 'development',
};

第二种:从 CLI 参数中传递

webpack --mode=development

Webpack中使用DevServer

到目前为止 webpack 基本上可以正常使用了,但在实际开发中你可能会需要:

1、提供 HTTP 服务而不是使用本地文件预览;

2、监听文件的变化并自动刷新网页,做到实时预览;

3、支持 Source Map,以方便调试。

对于这些, Webpack 都为你考虑好了。Webpack 原生支持上述第2、3点内容,结合官方提供的开发工具 DevServer 也可以很方便地做到第1点。 DevServer 会启动一个 HTTP 服务器用于服务网页请求,同时会帮助启动 Webpack ,并接收 Webpack 发出的文件更变信号,通过 WebSocket 协议自动刷新网页做到实时预览

安装服务器依赖

npm install -g webpack-dev-server@4.9.2
npm install --save-dev webpack-dev-server@4.9.2

修改配置文件

const path = require('path');
module.exports = {
  devServer: {
    // 服务器打开目录
    static: path.join(__dirname,'public'),
    // 开启压缩
    compress: true,
    // 设置端口
    port: 9000,
    // 热更新
    hot: true,
    // 自动打开浏览器
    open: true,
    //使用 History 路由模式时,若404错误时被替代为 index.html
    historyApiFallback: true
 }
};

服务器运行方式

1、webpack serve

2、webpack-dev-server

温馨提示

修改配置文件的情况下,是无法热更新的,需要重启服务器,热更新只对代码剩下 src

配置快捷运行方案

配置快捷运行方案可以方便我们统一运行方式,不然我们需要记忆更多关键词例如: webpack 、 webpack serve 、 webpack-dev-server 等等

修改方案

package.json 中, scripts 中进行配置

"scripts": {
  "start": "webpack",
  "dev":"webpack serve"
}

温馨提示

如果在 package.json 文件中,并没有找到 scripts ,可以通过执行 npm init 重新生成 package.json 文件

运行方式

npm start  // 相当于运行webpack
npm run dev // 相当于运行webpack serve

开发模式与生产模式分离

在开发的过程中,我们一般会将开发环境进行区分:

1、开发环境

2、测试环境

3、生产环境

4、...

开发模式

开发模式是为开发者更方便开发而存在的,在开发模式下,一般是为了更方便的调试,所以错误信息会提示很全面,并且存在热更新状态等

生产模式

生产模式是为了项目打包上线而存在的,在生产模式下,会去掉更多的错误提示,让想打包尽可能变小等

webpack 配置开发模式和生产模式

webpack 中,我们可以区分开发模式和生产模式,例如 mode 就有 developmentproduction 的区别

安装依赖:

webpack-merge 可以用来合并多个配置文件:

npm install --save-dev webpack-merge@5.8.0

创建开发和生产模式文件

在项目根目录下创建 webpack.dev.config.jswebpack.prod.config.js 文件

// webpack.dev.config.js
const commonConfig = require("./webpack.config");
const path = require('path');
const { merge } = require("webpack-merge");
const devConfig = {
  mode: 'development',
  devServer: {
    // 服务器打开目录
    static: path.join(__dirname,'public'),
   // 开启压缩
    compress: true,
    // 设置端口
    port: 9000,
    // 热更新
    hot: true,
    // 自动打开浏览器
    open: true,
    //使用 History 路由模式时,若404错误时被替代为 index.html
    historyApiFallback: true
 }
}
module.exports = merge(commonConfig,devConfig)
/ webpack.prod.config.js
const commonConfig = require("./webpack.config");
const { merge } = require("webpack-merge");
const prodConfig = {
  mode: 'production'
}
module.exports = merge(commonConfig,prodConfig)

重新配置运行方式

"scripts": {
  "start": "webpack --config webpack.prod.config.js",
  "dev": "webpack-dev-server --config webpack.dev.config.js"
}

Webpack中devtool增强调试过程

我们可以通过 devtool 来设置增强调试过程

通过设置 devtool 生成source map

Source Map

1、source map 是一个信息文件,里面存储着代码压缩前后的位置信息。

2、即可以在Debug时直接显示原始代码的位置信息,而不是压缩后的,极大方便后期调试

开发环境下默认生成的Source Map ,记录的是生成后的代码的位置。会导致运行时报错的行数与源代码的行数不一致的问题

解决方案:在webpack.dev.config.js中添加如下配置,即可保证运行时报错的行数与源代码的行数保持一致

const commonConfig = require("./webpack.config");
const { merge } = require("webpack-merge");
const devConfig = {
  mode: 'development',
  //此选项生成的 Source Map 能保证运行时的报错行数与源代码的行数保持一致
  devtool:'source-map'
}
module.exports = merge(commonConfig,devConfig)

Source Map 的最佳实践

开发模式下

建议直接把devtool 的值设置为 source-map ,可以直接定位到具体的错误行

生产环境下

建议关闭Source Map 或者 将devtool 设置为 hidden-nosources-source-map ,防止源码泄漏,提高网站的安全性

.browserslistrc文件说明

browserslistrc文件是为了表示当前项目的浏览器兼容情况

使用方式有三种:

1、在package.json中设置

2、设置成独立的配置文件

3、某些插件需要重新设置browserslist

我们参考Vue项目的环境配置,选择第二种方式,设置成独立的配

置文件

在项目的根目录下创建 .browserslistrc 文件

> 1%  // 兼容市场上占有率超过1%的浏览器(世界级)
last 2 versions  // 兼容浏览器最近的两个版本
not dead // 不支持24个月内没有官方支持或者更新的浏览器
not ie 11  // 不支持ie 11

postcss-loader处理css兼容

postcss是JavaScript转换样式的工具,这个工具能处理css兼容问题。就是这个工具能给我们写的css代码添加一些兼容的前缀

安装

npm install --save-dev autoprefixer@10.4.7
npm install --save-dev postcss@8.4.14
npm isntall --save-dev postcss-loader@7.0.0
npm install --save-dev postcss-preset-env@7.7.1

在项目根目录下创建 postcss.config.js 文件

// postcss.config.js
module.exports = {
  plugins: {
    "autoprefixer":{
      "overrideBrowserslist":[
        // 兼容IE7以上浏览器
       "ie >= 8",
        // 兼容火狐版本号大于3.5浏览器
        "Firefox >= 3.5",
        // 兼容谷歌版本号大于35浏览器,
        "chrome >= 35"
     ]
   }
 }
}

修改 webpack.config.js 文件

rules: [
 {
    test: /\.css$/,
    use:[MiniCssExtractPlugin.loader,"css-loader","postcss-loader"]
 },
 {
    test: /\.less$/,
    use:[MiniCssExtractPlugin.loader,"css-loader","postcss-loader","less-loader"]
 },
 {
    test: /\.(scss|sass)$/,
    use:[MiniCssExtractPlugin.loader,"css-loader","postcss-loader","sass-loader"]
 }
]

修改CSS文件

.root{
  width: 400px;
  height: 200px;
  background-color: #f1f1f1;
  display: flex;
}

Webpack构建React环境

目前React和Vue两个最常用的前端框架都是使用Webpack进行构建项目

接下来,我们用 webpack 构架一个React项目的环境

安装

npm install -D @babel/preset-react@7.17.12
npm install -S react@18.2.0
npm install -S react-dom@18.2.0

增加配置文件

React使用的语法为 jsx 语法,所以我们需要配置 jsx 的解析模块

{
  test: /\.(js|jsx)$/,
  exclude: /node_modules/,
  loader: 'babel-loader'
}

同时我们需要修改 babel.config.js 文件

module.exports = {
  presets: [
    '@babel/preset-env',
    "@babel/preset-react"
 ]
}

编写React代码

import React from 'react'
import ReactDom from 'react-dom'
class App extends React.Component {
  render(){
    return (
      <div style={{color:"#333"}}>
       Hello
      </div>
   )
 }
}
ReactDom.render(<App/>,document.getElementById("root"))

Webpack构建Vue环境

目前React和Vue两个最常用的前端框架都是使用Webpack进行构建项目

接下来,我们用 webpack 构架一个Vue项目的环境

安装

Vue专属文件时 .vue ,我们需要一些包帮助去解析他

npm install --save vue@3.2.37
npm install --save-dev vue-loader@17.0.0
npm install --save-dev vue-style-loader@4.1.3
npm install --save-dev vue-template-loader@1.1.0
npm install --save-dev vue-template-compiler@2.6.14

增加配置文件

webpack.config.js 文件中

const { VueLoaderPlugin } = require('vue-loader')
const baseConf = {
  module:{
 {
      test: /\.vue$/,
      use: ['vue-loader']
}
},
  plugins:[
    new VueLoaderPlugin()
 ]
}

编写Vue代码

// index.js
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#root')
// App.vue
<template>
 <p>Vue文件环境测试</p>
</template>
<script>
export default {
}
</script>
<style>
p{
 color: red;
}
</style>
目录
相关文章
|
6月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
1206 0
|
28天前
|
JavaScript
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
这篇文章是关于如何在webpack环境中配置Vue.js,包括安装Vue.js、解决报错、理解el与template的区别、使用SPA模式、抽离模板为对象、封装为单独的js文件、安装vue-loader时遇到的问题及解决方案,以及整个过程的总结。
69 2
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
|
28天前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
42 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
28天前
|
JavaScript 前端开发 Java
webpack学习一:什么是模块化开发,什么是webpack,以及二者之间的关系。
这篇文章介绍了模块化开发的概念、历史和实现方式,以及webpack作为一个现代JavaScript应用的静态模块打包工具,它如何帮助我们将ES6等高级语法打包成浏览器可以识别的低级语法,并解释了npm在webpack安装和使用中的作用。
40 1
webpack学习一:什么是模块化开发,什么是webpack,以及二者之间的关系。
|
28天前
|
移动开发 JavaScript 前端开发
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
这篇文章主要介绍了如何通过配置Webpack的插件,如HtmlWebpackPlugin、uglifyjs-webpack-plugin和webpack-dev-server,来简化前端开发流程。
31 0
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
|
2月前
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
2月前
|
缓存 JSON 前端开发
webpack入门核心知识还看不过瘾?速来围观万字入门进阶知识
该文章深入探讨了Webpack的高级配置与使用技巧,包括Tree Shaking、开发与生产环境的配置差异、代码分割策略、预加载与预取技术的应用等方面的内容。
|
6月前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
225 0
|
4月前
|
JavaScript 前端开发 应用服务中间件