5.0 Vue中使用webpack

2023-11-05

webpack的基本使用

1,什么是webpack?

概念:webpack是前端项目工程化的具体解决方案。

主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆,处理浏览器端JavaScript的兼容性,性能优化等强大的功能。

好处:让程序员吧工作的中心放到具体功能的实现上,提高了前端开发效率和项目的可维护性。
注意:目前Vue,React等前端项目,基本上都是基于webpack进行工程化开发的。

2,安装webpack

npm install webpack@5.42.1 webpack-cli@4.7.2 -D

3,在项目中配置webpack

① 在项目根目录中,创建名为 webpack.config.js的webpack配置文件,并初始化如下的基本配置:

// 使用Node.js中的导出语法,向外导出一个webpack的配置对象
module.exports = {
  //mode 用来指定构建模式,可选值有 development 和 production
  // 开发时使用 development 打包速度快,体积大
  // 上线的时候使用 production 打包速度快, 体积小
  mode: 'development',
};

② 在package.json的script节点下,新增 dev 脚本如下:

  "scripts": {
    "dev": "webpack"
  }

③ 在终端中运行 npm run dev 命令,启动 webpack 进行项目的打包构建
在这里插入图片描述
运行之后会在项目中自动生成一个dist文件,我们后续只需要导入dist文件下的main.js文件即可
在这里插入图片描述

4,自定义打包的入口与出口

在webpack.config.js配置文件中,通过entry节点指定打包的入口。通过output节点指定打包的出口
示例代码如下:

const path = require('path');
// 使用Node.js中的导出语法,向外导出一个webpack的配置对象
module.exports = {
  //mode 用来指定构建模式,可选值有 development 和 production
  mode: 'development',
  // entry:'指定要处理那个文件'
  entry: path.join(__dirname, './src/index.js'),
  // output 指定生成的文件存放在哪里
  output: {
    // 存放目录
    path: path.join(__dirname, 'dist'),
    // 生成的文件名
    filename: 'main.js',
  },
};

webpack中的插件

1,webpack插件的作用

常用插件:

  1. webpack-dev-server
    - 类似于 node.js 的nodemon工具
    - 每当修改了源代码,webpack会自动进行项目的打包和构建
  2. html-webpack-plugin
    - webpack中的HTML插件 (类似于一共模板引擎插件)
    - 可以通过此插件自定制 index.html 页面的内容

2,安装配置 webpack-dev-server

安装:
运行命令安装插件:npm install webpack-dev-server -D
webpack 4 以上我们还需要安装webpack-cli
npm install webpack-cli -D

配置:
① 新增 webpack.config.js 中的 devServer命令:

 // 监听文件改动,自动打包    //  watch: true,
    devServer: {
        static: path.join(__dirname, './'), // 指定发布后的映射的路径,./代表映射当前路劲
        compress: true, // 压缩资源
        port: 9000, // 指定服务器的端口号
        open: 'Chrome', // 指定以哪个浏览器打开,open:true 代表以默认浏览器打开
    }

webpack版本4以上的在package.json内配置如下

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

② 再次运行 npm run dev 命令,重新进行项目的打包

③ 在浏览器中访问 http://localhost:8080 地址查看自动打包效果
修改引入文件
在这里插入图片描述
***注意:webpack-dev-server 会启动一个实时打包的http服务器

3,安装 html-webpack-plugin

安装:
npm install html-webpack-plugin -D
配置:
① webpack.config.js文件中新增配置如下代码

const HtmlPlugin = require('html-webpack-plugin');// 导入  html-webpack-plugin 插件,得到插件的构造函数
// nwe 构造函数,创建插件的示例对象
const htmlPlugin = new HtmlPlugin({
  template: './src/index.html', //指定要复制那个页面
  filename: './index.html', //指定复制出来的文件名和存放路径
});

② webpack.config.js文件module.exports中新增

module.exports = {
  // 插件的数组,将来webpack在运行时,会被加载并调用这些插件
  plugins: [htmlPlugin],
}

4,webpack 中的loader插件

在实际开发过程中,webpack默认只能打包处理以.js后缀名结尾的模块。其他非.js后缀名结尾的模块,webpack 默认处理不了,需要调用loader 加载器才可以正常打包,否则会报错!
loader加载器的作用:协助webpack 打包处理特定的文件模块。比如:

  • css-loader 可以打包处理.css相关的文件
  • less-loader可以打包处理.less相关的文件
  • babel-loader可以打包处理webpack无法处理的高级JS语法
    在这里插入图片描述

Ⅰ,安装打包处理css文件
① 运行 npm i style-loader -Dnpm i css-loader -D,安装处理css文件的loader
② 在wenpack.config.js的module -> rules数组中,添加loader规则如下

module:{	// 所有第三方文件模块的匹配规则
	rules:[	// 文件后缀名的匹配规则
		{test:/\.css$/,use:['style-loader','css-loader']}
	]
}

其中,test表示匹配的文件类型,use表示对应要调用的loader,顺序是固定的,多个loader的调用顺序是:从后往前调用。

Ⅱ,安装打包处理less文件

① 运行 npm i less-loader less -D命令
② 在webpack.config.js的 module ->rules数组中,添加loader规则如下:

module:{
	rules:[
		{test:/\.less$/,use:['style-loader','css-loader','less-loader']}
	]
}

Ⅲ,安装打包处理样式表中url路径相关的文件
① 运行 npm i url-loader file-loader -D 命令
② 在webpack.config.js 的module ->rules 数组中,添加 loader规则如下:

module: {
    // 所有第三方文件模块的匹配规则
    rules: [
      // 文件后缀名的匹配规则
      { test: /\.jpg|png|gif$/, use: 'url-loader?limit=22229' }],
  },

其中?之后的loader的参数项:limit用来指定图片的大小,单位是字节(byte),只有<= limit大小的图片,才会被转化为base64格式的图片

Ⅳ,打包处理js文件中的高级语法
webpack 只能打包处理一部分高级的JavaScript语法。对于那些webpack无法处理的高级JS语法,需要借助于 babel-loader进行打包处理。例如:
在这里插入图片描述
安装:npm i babel-loader @babel/core @babel/plugin-proposal-decorators -D
配置:
① 在 webpack.config.js的module ->rules 数组中,添加loader规则如下:

// 注意:必须使用exclude 指定特殊项,因为 node_modules 目录下的第三方包不需要被打包
{test:/\.js$/,use:'babel-loader',exclude:'/node_modules/'}

② 在项目根目录下,创建名为 babel.config.js 的配置文件,定义Babel的配置项如下:

module.exports={
// 声明 babel 可用的插件
plugins:[['@babel/plugin-proposal-decorators',{legacy:true}]]
}

详情请参考Babel的官网

webpack打包发布

配置webpack的打包发布

在package.json文件的,scripts节点下,新增build命令如下:

"scripts":{
	"build":"webpack --mode production" 	//项目发布时,运行build命令
}

–mode 是一个参数项,用来指定webpack 的运行模式。production代表生产环境,进行代码压缩和性能优化。

注意:通过 --mode 指定的参数项,会覆盖 webpack.config.js 中的model 选项。

优化dist文件夹打包

① 吧JavaScript 文件统一生成到JS目录中
在webpack.config.js 配置文件的output节点中,进行如下的配置:

  output: {
    // 生成的文件名
    filename: 'js/bundle.js',
    // 存放目录
    path: path.join(__dirname, 'dist'),
  }

② 吧图片文件统一生成到 image 目录中
修改webpack.config.js中的module ->rules配置项,修改指定图片文件的输出路径:

      {
        test: /\.jpg|png|gif$/,
        use: 'url-loader?limit=22229&outputPath=images', //在配置多个参数之间,使用&符号进行分割
      },

③ 运行build命令时自动删除旧的dist文件夹
安装:npm install --save-dev clean-webpack-plugin
配置:在webpack.config.js文件中,新增 const { CleanWebpackPlugin } = require('clean-webpack-plugin');
修改plugins数组内容 plugins: [htmlPlugin, new CleanWebpackPlugin()],

Source Map

1,什么是Source Map

Source Map 就是一个信息文件,里面储存着位置信息,也就是说,Source Map文件中存储着压缩混淆后的代码,所对应的转换前的位置。
作用:出错的时候,除错工具将直接显示原始代码,而部署转换后的代码,能够极大的方便后期的调试。

开发环境下默认生成的Source Map,记录的是生成后的代码的位置。会导致运行时报错的行数,与源代码的行数不一致的问题,示意图如下:
在这里插入图片描述

解决默认Source Map的问题

开发环境下,推荐在webpack.config.js中添加如下的配置,即可保证运行时报错的行数与源代码的行数保持一致:

module.exports = {
// 此配置生成的Source Map能够保证运行时报错的行数与源代码的行数保持一致
  devtool: 'eval-source-map',	//在发布项目时,出于安全考虑应禁用此行代码
}

另一种方式,只定位行数不暴漏源码
在这里插入图片描述

注意:在实际开发中我们并不需要自己配置 webpack

  • 实际开发中会使用命令行工具(俗称 CLI )一键生成带有 webpack 的项目
  • 开箱即用,所有webpack配置项都是现成的!
  • 我们只需要知道webpack中的基本概念即可!

webpack中@的用法

在webpack.config.js中添加如下的配置

resolve: {
    alias: {
      // 告诉webpack,@符号表示src这一层目录
      '@': path.join(__dirname, './src/'),
    },
  },

在这里插入图片描述

在Chrome浏览器中安装vue_devtools调试工具

vue_devtools调试工具
在这里插入图片描述
点击详情,
在这里插入图片描述

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

5.0 Vue中使用webpack 的相关文章

  • 使用 keyup 上的 Submit() 提交表单两次

    我有一个与此类似的 jQuery HTML 代码
  • 使用画布元素作为文本区域

    我正在寻找有关如何使用类似于文本区域的画布元素的直接描述 我见过这样的项目Ace http ace ajax org 只是想知道如何像文本区域一样写入该区域 只是纯文本 没有什么花哨的 提前致谢 Ace 曾经是 Mozilla Skywri
  • 1分30秒倒计时器javascript

    我有代码 但它适用于 2 分钟计时器 我需要将其修改为 1 分 30 秒计时器 我已经尝试过 但未能从 1 30 开始计时器 因为我是这一行的初学者 并且想学习如何做到这一点 这是代码 div div
  • 执行页面的 javascript 后保存页面的 html 输出

    我正在尝试抓取一个网站 它首先加载 html js 使用js修改表单输入字段 然后使用POST 如何获得 POSTed 页面的最终 html 输出 我尝试使用 phantomjs 执行此操作 但它似乎只有渲染图像文件的选项 谷歌搜索表明这应
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 是否可以将自定义 HTML 添加到传单图层组和图层控件

    有什么方法可以将自定义 HTML 注入图层组和图层控件中吗 在我们的应用程序中 我们实现了滑块 输入 范围 来调整不透明度设置 并且很明显 在其控制容器内部的基础层上使用专用滑块是有意义的 没有选项或参数可以修改此控件 理想情况下 我们希望
  • Visual Studio IDE 中功能后的空间

    如何设置 Visual Studio 中的设计以在我的 javascript 函数后面放置一个空格 目前 当我按下返回键时 我得到了这个 var myfunc function 当我想要这个的时候 var myfunc function 知
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • Amcharts 图表 - 图表列到自定义 URL 的超链接以在新选项卡/窗口中打开

    我正在尝试制作一个 amcharts 图表 其中的列链接到自定义网址 并希望网址在新选项卡 窗口中打开 我尝试将此代码添加到图形对象中 但它不起作用 它在同一选项卡 窗口中打开链接 listeners event clickItem met
  • Twitter Bootstrap 轮播在加载时自动播放

    使用twitter bootstrap框架 如何调用轮播来 自动滑动 这意味着当页面加载时 轮播会自动滚动 我尝试过 javascript onLoad click 函数 a 下一个链接的 但这不起作用 你应该这样做Twitter Boot
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • 变量前面加双下划线

    我的节点代码中有以下代码片段 var fs require fs fs readdir dirname function err files console log files 为什么变量 dirname 有双下划线 我知道一个下划线是私有
  • FormData 中的 Blob 为 null

    我正在尝试通过远程 API 通过 ajax 在 android 中发送创建的照片 我在用着相机图片背景 https github com an rahulpandey cordova plugin camerapicturebackgrou
  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 属性访问器(getter)的扩展运算符问题

    我很难理解为什么以下代码存在一些问题https jsfiddle net q4w6e3n3 3 https jsfiddle net q4w6e3n3 3 Note 所有示例均在 chrome 版本 52 0 2743 116 中进行测试
  • jspm / jQuery / TypeScript - 模块“jquery”没有默认导出

    我正在尝试使用 TypeScript 和 jspm system js 来引导 Web 应用程序进行模块加载 我还没有走多远 安装 jspm 后 并使用它来安装 jQuery jspm install jquery 以及基础知识 main
  • 将数组中的所有元素相乘

    我在这里找不到我真正想要的例子 我想将所有数组元素相乘 因此如果数组包含 1 2 3 总和将为 123 6 到目前为止 我已经得到了这段代码 但它返回未定义 function multiply array var sum 1 for var
  • 如何正确删除动画集中引用的 Raphael SVG 元素?

    我有一组动画 Raphael SVG 元素 我正在通过用户发起的 ajax 调用添加新元素并删除旧元素 我 set push 新元素 但因为我需要删除的元素通常不是集合中的最后一个元素 所以我使用 element remove 而不是 se
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • Vue table不分页 动态加载数据(类似手机端滑动到底端后再去获取数据)

    最近接到一个需求 pc端中的table 数据不做分页 而是做成滚动条形式 但是table中的数据还是一次显示50条 等这50条滑动到底部后 再去加载50条 有加载效果 以此类推 直到数据全部展示 值得注意的是 我的需求是 第一次请求数据就将
  • 在线UTF-8/GBK互相转换工具

    在线UTF 8 GBK互相转换工具 https encode guiboweb com
  • shell执行Oracle SQL并捕获异常案例分析

    一 shell脚本 实现功能读取指定配置文件中的Oracle数据库连接 清空传入变量表的数据 以及清除数据之后的结果进行捕获分析 bin bash Created Date 2022 12 16 Author Last Modified 2
  • db2错误代码

    DB2错误代码 SQL返回码信息对照 用COBOL链接DB2时 出现DB2错误信息时 如果你不懂代码是什么意思 可以用这份资料查找 当然你也可以直接在db2的命令行下输入 db2 SQL30081N 系统会给出一些提示信息 sqlcode
  • LiDAR SLAM的比较

    在自动驾驶领域 定位是很重要的一环 为了建立更有鲁棒性 精确的定位 在实际自动驾驶车上往往都会使用激光雷达 激光雷达相比于摄像头 对光照变化不敏感 适合白天和黑夜 绝大多数路况 激光雷达获得的距离信息精度很高 获取的feature很稳定 当
  • Spring 异常处理的三种方式 整理

    异常处理方式一 ExceptionHandler 异常处理方式二 实现HandlerExceptionResolver接口 异常处理方式三 ControllerAdvice ExceptionHandler 三种方式比较说明 强烈推荐各位看
  • 小程序接入微信客服

    wx openCustomerServiceChat Object object 微信开放文档 微信小程序打开微信客服 接口文档 企业微信开发者中心 1 网页搜索 微信客服 扫码登录 根据提示 填写信息 微信客服 2 在 微信客服 中进入企
  • 项目打包报不能在脱机状态下访问**资源

    项目场景 springboot项目 使用maven进行打包操作 问题描述 Failed to execute goal org springframework boot spring boot maven plugin 2 5 0 repa
  • UE4_UStruct 遍历

    一个结构体中存在一个Val变量 Val变量的类型是FVector4 想从c 层面去遍历获得Val的值 上图是很早之前的一个Property继承关系图 当然 在4 25UProperty被FProperty夺笋 好处呢 见下 没有继承UObj
  • etcd的使用

    启动etcd服务 启动etcd时最主要的是需要准备两个没有使用过的端口 这两个端口一个用于etcd之间同步信息 一个用于etcd向客户端提供服务的端口 因此启动单个etcd节点 只需按照如下命令行输入即可 server name myetc
  • sigmoid & logistic

    1 吴恩达老师视频中说sigmoid函数就是logistic函数 2 查阅复旦大学邱锡鹏老师关于深度学习的书 在第四章中写道 Sigmoid型函数是指一类S型曲线函数 为两端饱和函数 常用的Sigmoid型函数有Logistic函数和Tan
  • OpenPose笔记——windows 10下,自编译openpose代码(vs下能跑了,pythonAPI也能使了)

    简直太可怕了 遇到N多的问题 我觉有必要写下来记录一下 我自己编译了四五天 编译了10几次 夭寿哦 缺好多好多东西 给大家讲一下具体步骤 一 准备工作 准备工作当然是各种环境 1 至少VS2015 以上的版本 2 CMake Gui 注意
  • 问题定义过程

    问题定义过程由四步组成 确立需求 证明需求 理解问题和它的上下文和问题陈述 这个模型的主要优点是能够帮助你确定和理解问题的细节 帮助你了解组织的使命和战略在问题解决过程中的的重要性 从这里你可以确定问题是否值得努力寻求解决方案 只有明白了问
  • 自顶向下 逐步求精

    将复杂的大问题分解为相对简单的小问题 找出每个问题的关键 重点所在 然后用精确的思维定性 定量地去 描述问题 其核心本质是 分解 自顶向下 top down 的分析算法通过在最左推导中描述出各个步骤来分析记号串输入 之所以称这样的算法为自顶
  • 埋点系统:详解设计埋点过程中的“who when where how what”

    上次写了一篇 如何用数据驱动产品迭代 其中提到了一点设计埋点的方法 很多朋友留言说需要设计埋点的指南 像我这种从来不拒需求的人 这两天下班闲下来之后就整理了一下埋点设计的一些知识 希望能有所帮助 在诸多招聘 JD 中提到的数据分析能力 主要
  • 使用raspberry pi pico 制作红绿灯

    需要的东西 一块面包版 一块raspberry pi pico 红绿黄led灯各一颗 220欧电阻3只 若干线 编程软件 thonny 操作系统 deepin 23 结果展示 使用raspberry pi pico 制作红绿灯 from m
  • 金山云服务器异常,金山云-文档中心-金山云告诉你:找不到服务器或dns错误怎么办...

    我们在用电脑 会经常使用浏览器 不少人经常在浏览网页时候突然跳出一个提示 上面显示 找不到服器 或 dns错误 下面 给大家分享找不到服务器或dns错误的解决经验 1 病毒所致 如果你电脑中了病毒 让你的DNS被劫持 比如自己的浏览器主页被
  • 【毕业设计】基于PLC的十字路口交通灯控制系统设计【仿真+源码+论文】

    摘 要 本次设计的课题是基于PLC的十字路口交通灯控制系统设计 传统的十字路口交通灯多采用单片机集成电路作为控制系统 单片机系统虽然在功能上能够实现十字路口交通灯的各种控制需求 但是单片机控制系统在设计时需要数字电路与模拟电路的完美结合 这
  • 基于跳表实现的轻量级KV存储引擎 项目总结

    参考 https github com youngyangyang04 Skiplist CPP 项目介绍 KV存储引擎 众所周知 非关系型数据库redis 以及levedb rockdb其核心存储引擎的数据结构就是跳表 本项目就是基于跳表
  • 5.0 Vue中使用webpack

    文章目录 webpack的基本使用 webpack中的插件 webpack打包发布 Source Map 注意 在实际开发中我们并不需要自己配置 webpack webpack中 的用法 在Chrome浏览器中安装vue devtools调