webpack的基本的配置和应用

2023-10-31

请添加图片描述

借用下官网的图,从图中我们了解webpack功能就是把带有依赖的模块打包成单一相同类别的静态资源文件。接下来帮大家分析下webpack的核心概念及一些辅助配置。

一、核心概念

webpack核心概念有这些:

  • 入口(entry)
  • 输出(output)
  • loader
  • 插件(plugin)
  • 模式(mode)
  • 浏览器兼容(browser compatitbility)
  • 环境(environment)

前面五个配置都挺常见的,后面这两个有点陌生。接下来对这些核心概念一个一个分析:

1. 入口(entry)

入口起点,用来构建内部依赖图的开始(这个可以看下我写的第二篇文章,webpack实现过程),下面我举个单个入口打包的例子,也就是外面常见的单页面应用

webpack.config.js

module.exports = {
  entry: './path/to/my/entry/file.js',
};

当然,单个入口打包肯定有它不足之处,如果我们子页面足够多的话,一个主系统对应很多个子系统,每次都要先加载下主页面,再异步加载下子页面,这样会使得混合起来就足够复杂和混乱,那我们这时候就需要多页面应用,子系统之间就不会相互影响,每次想要的页面直接找便可。也就是我们多入口打包。

那说下前端的实现:

  1. 修改webpack config 的 entry,改成多个
  2. 修改webpack config 的 插件HtmlWebpackPlugin,有几个入口就要生成几个index.html页面

实践可参考这篇文章:https://www.cnblogs.com/lvdabao/p/5944420.html

2. 输出(output)

这个属性就是告诉webpack输出在哪

webpack.config.js

const path = require('path');

module.exports = {
  entry: 'file.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'my-first-webpack.bundle.js',
  },
};

多入口多出口配置

module.exports = {
    mode: 'development',
    entry: {
        index:__dirname + '/src/index.js',
        signup:__dirname + '/src/signup.js',
    },

    output: {
        path:__dirname + '/dist',
        filename: '[name].bundle.js',
    }
}

3. loader

webpack只能理解js和json文件,这是webpack开箱即用的自带能力。loader可以让webpack有效的处理其它的文件,把它们转换有效的模块,这里可以看我第三篇内容怎么实现webpack-loader。

  1. test 属性,识别出哪些文件会被转换。
  2. use 属性,定义出在进行转换时,应该使用哪个 loader。

webpack.config.js

const path = require('path');

module.exports = {
  output: {
    filename: 'my-first-webpack.bundle.js',
  },
  module: {
    rules: [{ test: /\.txt$/, use: 'raw-loader' }],
  },
};

4. plugin

简单聊一句plugin和loader的一个功能上的区别。loader是用于转换某些类型的模块,而插件可以用于执行更广泛的任务。包括打包优化,资源管理,注入环境变量。之后在我第三篇文章会具体实现个webpack-plugin。

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 用于访问内置插件

module.exports = {
  module: {
    rules: [{ test: /\.txt$/, use: 'raw-loader' }],
  },
  plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
};

5. 模式(mode)

模式有nonedevelopmentproduction

选项 描述
development 会将process.env.NODE_ENV的值设为development。启用NamedChunksPlugin和NamedModulesPlugin。
production 会将process.env.NODE_ENV的值设为production。启用FlagDependencyUsagePlugin,FlagIncludedChunksPlugin,ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPluginUglifyJsPlugin.
none 没有任何配置

6. 浏览器兼容性(browser compatibility)

Webpack 支持所有符合 ES5 标准 的浏览器(不支持 IE8 及以下版本)。webpack 的 import()require.ensure() 需要 Promise

7. 环境(environment)

Webpack 5 运行于 Node.js v10.13.0+ 的版本。

二、 一些辅助配置

1. devserver

通过配置devserver选项,可以开启一个本地服务器。

常做了哪些事情:

  • port:监听端口
  • compress:压缩后通常能帮我们减少响应 70% 左右的大小;
  • proxy:代理访问资源
  • https:可以传入 true 来支持 https 访问,也支持传入自定义的证书
port:8080,
compress:true,
proxy: {
    '/proxy': {
        target: 'http://your_api_server.com',
        changeOrigin: true,
        pathRewrite: {
            '^/proxy': ''
        }
},
https: true,
//也可以传入一个对象,来支持自定义证书  
https: {    
         key: fs.readFileSync("/path/to/server.key"),  
         cert: fs.readFileSync("/path/to/server.crt"),  
         ca: fs.readFileSync("/path/to/ca.pem"),  
 },

2. devtool

这个属性就是调试代码的方式

3. cache

缓存生成的 webpack 模块和 chunk,来改善构建速度。

4. watch 和 watchOptions

Webpack 可以监听文件变化,当它们修改后会重新编译。这个页面介绍了如何启用这个功能,以及当 watch 无法正常运行的时候你可以做的一些调整。

5. Performance

配置如何展示性能提示。例如,如果一个资源超过 250kb,webpack 会对此输出一个警告来通知你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack的基本的配置和应用 的相关文章

  • 如何取消js文件的压缩?

    如何取消通过 webpack 工具缩小的 js 文件 缩小之前 function autoslideSlider next slide trigger click window on load function preloader fade
  • 未处理的拒绝(ChunkLoadError):加载块 1 失败

    我基本上想做一个poc将我的主应用程序的某些部分提取到一个单独的包中 我已在我的 git 存储库中构建了一个示例单独包myapp poc ui https github com prabhatmishra33 myapp poc ui 现在
  • webpack - 如何将捆绑包提取到各个组件

    我想从bundle js 一个webpack文件 中解压 提取所有组件和js文件 我只留下这个文件 我已经用谷歌搜索并尝试了几种方法来解压捆绑js文件 但它没有成功 我也尝试过该解决方案 请查找参考 如何提取Webpack中的bundle
  • 如何从捆绑 .spec.js 文件中排除 webpack

    我的 Package bundle 读取 var reqContext require context true js reqContext keys map reqContext 其中基本上包括所有 js 文件 我希望表达式排除任何 sp
  • 使用 webpacker 部署到 heroku 后,资产不存在于资产管道中

    我正在使用 Rails 5 2 3 我可以在本地下载 pdf 但Heroku它通过错误 500 错误是 ActionView Template Error 资源 pdf css 不存在于资源管道中 这是我的 Heroku 日志 2019 0
  • 如何使用 gulp webpack-stream 生成正确命名的文件?

    目前我们正在使用Webpack https webpack github io 对于我们的模块加载器 以及Gulp http gulpjs com 对于其他一切 sass gt css 以及开发 生产构建过程 我想将 webpack 的东西
  • 如何全局公开 es6 模块

    我需要编写一个可在全局窗口上使用的模块 我使用 es6 创建模块 我定义的每个类都有它自己的文件 我正在使用 webpack 来 babelify 并捆绑这些类 我的模块的入口点也是包含要公开的全局的文件 我尝试了各种方法来实现这一点 包括
  • 如何在 Vue.js 中排除文件(例如配置文件)?

    https cli vuejs org config configurewebpack https cli vuejs org config configurewebpack https cli vuejs org config chain
  • Webpack 加载器与插件;有什么不同?

    webpack 中的加载器和插件有什么区别 The 插件文档 https webpack github io docs using plugins html只是说 使用插件添加通常与 webpack 中的捆绑包相关的功能 我知道 babel
  • Webpack 编译的 Chrome 扩展抛出 `unsafe-eval` 错误

    使用 Webpack 编译后重新加载 Chrome 扩展时出现此错误 Uncaught EvalError Refused to evaluate a string as JavaScript because unsafe eval is
  • 如何从 docker 容器运行 webpack 构建?

    我正在制作的应用程序是用 ES6 编写的 其他好东西是由 Docker 容器内的 webpack 转译的 目前 一切工作从创建内部目录 安装依赖项到创建编译的捆绑文件 当运行容器时 它说 dist bundle js 不存在 除非我在主机目
  • 解决方案:动态加载独立编译的 Webpack 2 包 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想分享如何捆绑一个充当插件主机以及它如何加载已安装的插件动态地 应用程序和插件都与 Webpack 捆绑在一起 应用程序和插件被编译和分
  • “找不到模块:错误:无法解析模块‘react/lib/ReactMount’”

    我使用Reactjs和webpack启动一个项目 当我在命令提示符中运行 node server 时 出现如下错误 并且chrome浏览器打开成功但也出现问题如下 github是 github com Yangqin0607 gallery
  • Sentry 与 @sentry/webpack-plugin 和 heroku

    我正在使用 webpack 来构建我的应用程序 它可以在本地使用 sentry webpack plugin 它自动生成版本并将源映射上传到 Sentry 但是 如果我尝试在 Heroku 上构建相同的应用程序 则会出现以下错误 Error
  • 使用react_on_rails gem 创建演示项目时的节点问题

    我正在尝试遵循这个tutorial https shakacode gitbooks io react on rails content docs tutorial html使用 gem react on rails 创建一个虚拟项目 我想
  • 从react-loadable中命名webpack块

    我已经成功在我的项目中添加了react loadable库以启用代码分割 我发现的唯一问题是webpack生成的块没有命名 它们被赋予了整数名称 我的反应可加载使用代码是 const AppRootLoadable Loadable loa
  • 让Webpack不捆绑文件

    所以现在我正在使用一个原型 我们使用 webpack 用于构建 tsx 文件和复制 html 文件 和 webpack dev server 之间的组合来提供开发服务 正如您可以假设的那样 我们也使用 React 和 ReactDOM 作为
  • 如何使用 Webpack 缩小 ES6 代码?

    我正在使用 webpack 并想要部署我的网站 如果我缩小并捆绑 JavaScript 代码 则会出现以下错误 解析错误 意外标记 名称 Button 这是我未捆绑的代码 use strict export class Button lt
  • React JS 服务器端问题 - 找不到窗口

    你好 我正在尝试在我的reactJS项目中使用react rte 我有服务器端渲染 每次我想使用这个包时 我都会得到 return msie 6 9 b test window navigator userAgent toLowerCase
  • 在旧浏览器上使用 Fetch 的 ReactJS

    我正在使用 Webpack 和 Babel 实现 React JS 但是 我在让 Fetch 与 IE 11 配合使用时遇到问题 我的 babelrc 文件中有以下内容 presets env stage 0 react 以及我的 webp

随机推荐

  • 开关电源-电容

    电子元器件 电容 1 电容是电路中重要的元件 种类多 用途广 主要有插件类和贴片类两种 2 电容主要特性参数 标称容量 耐压 误差 温度 2 1电容容量常用单位有微法 uF 纳法 nF 皮法 pF 单位换算 luF 103nF 106pF
  • 【数模】编码的传输问题 Huffman算法编程实现(matlab)

    编码的传输问题 利用Huffman算法编程实现以下问题 已知字母A B C D E F出现的概率 字母 概率 A 35 B 10 C 20 D 10 E 20 F 5 哈夫曼编码基础知识复习 哈夫曼编码 Huffman Coding 又称霍
  • Tensorflow框架(张量、计算图、会话)

    张量 计算图 会话 人工智能实践 Tensorflow笔记 Tensorflow框架 张量 计算图 会话 基于Tensorflow的NN 神经网络 用张量表示数据 用计算图搭建神经网络 用会话执行计算图 优化线上的权重 参数 得到模型 张量
  • 抓包工具fiddler不抓取火狐浏览器的数据

    fiddler可以抓到google浏览器的包 但是抓不到Firefox浏览器的包 火狐浏览器版本79 0 64 位 fiddler 4 亲测好使 操作步骤 打开Fiddler gt 菜单栏 Tools gt Options gt Conne
  • sdf转smi

    from rdkit import Chem smi Chem MolToSmiles Chem SDMolSupplier sdf path 0
  • 全局组件和局部组件

    1 全局组件和局部组件的区别 全局组件 只需要在main js中导入一次 整个项目都可以直接使用 在main js中导入 局部组件 用一次 导一次 在用到的地方导入 2 局部组件导入步骤 3部曲 1 导入子组件 import Registe
  • 基于Flask框架的python微博数据分析

    Python 微博数据 博文 分析 项目简介 后端采用Flask框架搭建 通过移动端接口获取数据 数据清洗后采用jieba进行词法分析 通过WordCloud制作词云展示 数据的可视化在以后的版本中会细化 版本V0 0 1功能 能够获取用户
  • 1. redis核心数据结构实战与高性能原理剖析

    分布式缓存技术Redis 1 Redis的五种数据结构 1 1 String 1 2 hash 1 3 列表list 1 4 set 1 5 ZSet 2 Redis的单线程和高性能 3 其他高级命令 3 1 scan 渐进式遍历键 本文是
  • 从零开始学习微服务 -微服务基本概述、微服务案例

    1 SpringCloud概述 1 1 互联网应用架构 1 1 1 单体应用架构 在诞 之初 项目的 户量 数据量规模都 较 项目所有的功能模块都放在一个工程中编码 编译 打包并且部署在一个Tomcat容器中的架构模式就是单体应用架构 这样
  • SQL注入基础原理与案例(详细总结)

    SQL注入基础原理与案例 一 前言 二 漏洞概述及危害 1 漏洞概述 2 漏洞危害 3 漏洞防范 三 SQL注入 1 SQL注入方式 1 信息收集 2 数据注入 3 高权限注入 2 判断是否存在注入点 1 新办法 2 老办法 3 字段判断
  • vue使用高德地图--附带移动获取当前城市信息

    高德地图 1 使用准备 申请密钥 vue使用 2 移动地图获取城市案例 注意事项 3 总结 1 使用准备 申请密钥 登录注册高德开放平台进入控制台 创建应用 申请key 生成key和安全密钥 2021之后key需要配合安全密钥使用 注意 安
  • 流媒体直播播放协议:HLS、RTMP、HTTP-FLV

    流媒体直播播放协议 HLS RTMP HTTP FLV 一 推拉流 二 协议介绍 1 HLS 2 RTMP 3 HDL HTTP FLV 一 推拉流 在开始之前 先把流媒体服务中的双端关系说一下 在一个完整的流媒体服务框架中 角色就是 两端
  • 【直接收藏】前端JavaScript面试100问 (上篇)

    1 解释一下什么是闭包 闭包 就是能够读取外层函数内部变量的函数 闭包需要满足三个条件 访问所在作用域 函数嵌套 在所在作用域外被调用 优点 可以重复使用变量 并且不会造成变量污染 缺点 会引起内存泄漏 使用闭包的注意点 由于闭包会使得函数
  • 【代码规范】常见注释规范

    1 在有处理逻辑的代码中 源程序有效注释量必须在20 以上 说明 注释的原则是有助于对程序的阅读理解 在该加的地方都加了 注释不宜太多也不能太少 注释语言必须准确 易懂 简洁 2 文件注释 文件注释写入文件头部 说明 以 开始 示例 文件名
  • Linux踩坑(一)—— 切换到命令行登入不进去

    在最近使用Linux时 切换到使用快捷键 Ctrl Alt F3 切换到命令行时 却登入不进去 1 出现背景 当我使用root登入时登入不进去 而且我自己的用户名是中间有空格的 David Wolfowitz 我在命令行中这样输入一直无法登
  • 期权是什么?期权的优缺点是什么?

    期权是一种合约 有看涨期权和看跌期权两种类型 也就是做多和做空两个方向 走势标的物对应大盘指数 这也是期权与其他金融工具的主要区别之一 可以用于套利 对冲股票和激进下跌的风险 下文介绍期权是什么 期权的优缺点是什么 一 什么是期权 期权的标
  • Vue:子组件使用的细节,子组件中的data,ref的使用,

    我们创建一个table div table tbody tbody table div
  • 【工号不够用了怎么办?】

    题目描述 工号不够用了怎么办 3020年 空间通信集团的员工人数突破20亿人 即将遇到现有工号不够用的窘境 现在 请你负责调研新工号系统 继承历史传统 新的工号系统由小写英文字母 a z 和数字 0 9 两部分构成 新工号由一段英文字母开头
  • 会话状态保持,JSESSIONID,COOKIE,URL重写

    居然有3W的访问量 好 我就把session和cookie的关系先来个总结 注意 是最最简单直白明了的总结了 http协议 协议 协议 重要的说3遍 http协议主要有2大块 请求头和请求体 cookie在http请求头里 就是一个由多个K
  • webpack的基本的配置和应用

    借用下官网的图 从图中我们了解webpack功能就是把带有依赖的模块打包成单一相同类别的静态资源文件 接下来帮大家分析下webpack的核心概念及一些辅助配置 一 核心概念 webpack核心概念有这些 入口 entry 输出 output