webpack配置排除打包

news2024/11/21 2:35:18

webpack配置排除打包

思路

  1. 打包时,不要把类似于element-ui第三方的这些包打进来

在这里插入图片描述

  1. 从网络上,通过url地址直接引入这些包

操作

(1)先找到 vue.config.js, 添加 externals 项,具体如下:

configureWebpack: {
  // 配置单页应用程序的页面的标题
  // 省略其他....
  externals: {
     /**
      * externals 对象属性解析。
      *  基本格式:
      *     '包名' : '在项目中引入的名字'
      *  
    */
    'vue': 'Vue',
    'element-ui': 'ELEMENT',
    'cos-js-sdk-v5': 'COS'
  },
 
  resolve: {
    alias: {
      '@': resolve('src')
    }
  }
}

再次运行打包,我们会发现包的体积已经大幅减小:上面的三个包已经不在打包的目标文件中了。但是,对应的项目也跑不起来了: 缺少了js文件。

(2)在public/index.html中采用外链引入排除的文件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= webpackConfig.name %></title>
    <link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/theme-chalk/index.min.css" rel="stylesheet">
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
    <script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.14/vue.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/index.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/cos-js-sdk-v5/dist/cos-js-sdk-v5.min.js" ></script>

  </body>
</html>

(3)再次打包。

效果OK

webpack配置排除打包-根据当前环境动态配置

注意,在开发项目时,文件资源还是可以从本地node_modules中取出,而只有项目上线了,才需要去使用外部资源。此时我们可以使用环境变量来进行区分。

具体配置-在生产环境时生效

具体如下:

动态设置externals

**vue.config.js**文件中:

let externals = {}
let cdn = { css: [], js: [] }
const isProduction = process.env.NODE_ENV === 'production' // 判断是否是生产环境
if (isProduction) {
  externals = {
      /**
      * externals 对象属性解析:
      * '包名' : '在项目中引入的名字'
    */
      'vue': 'Vue',
      'element-ui': 'ELEMENT',
      'cos-js-sdk-v5': 'COS'
  }
  cdn = {
    css: [
      'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/theme-chalk/index.min.css' // element-ui css 样式表
    ],
    js: [
      // vue must at first!
      'https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.14/vue.min.js', // vuejs
      'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/index.min.js', // element-ui js
      'https://cdn.jsdelivr.net/npm/cos-js-sdk-v5/dist/cos-js-sdk-v5.min.js', // xlsx
    ]
  }
}

webpack配置externals配置项

configureWebpack: {
  // 配置单页应用程序的页面的标题
  name: name,
+ externals: externals,
  resolve: {
    alias: {
      '@': resolve('src')
    }
  }
}

注入配置到html模板

(1)

在vue.config.js中,设置config.plugin('html'),如下4项

chainWebpack(config) {
  config.plugin('preload').tap(() => [
    {
      rel: 'preload',
      fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
      include: 'initial'
    }
  ])
  // 省略其他......
  
  // 注入cdn变量 (打包时会执行)
+  config.plugin('html').tap(args => {
+    args[0].cdn = cdn // 配置cdn给插件
+    return args
+  })
  // 省略其他...
}

(2)

找到 public/index.html 通过配置CDN Config 依次注入 css 和 js。内容如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= webpackConfig.name %></title>
    <% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
      <link rel="stylesheet" href="<%=css%>">
    <% } %>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
    <% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
      <script src="<%=js%>"></script>
    <% } %>
  </body>
</html>

打包 ,检查效果

npm run build:prod

<% for(var js of htmlWebpackPlugin.options.cdn.js) { %>

<% } %>


#### 打包 ,检查效果

```js
npm run build:prod

检查生成的index.html中是否有css引入和js引入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaSE】异常 (异常抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 自定义异常)

文章目录 异常概念异常结构 异常处理异常抛出异常的捕获异常声明throwstry-catch捕获并处理finally 自定义异常 异常 概念 在程序运行过程中&#xff0c;可能会存在一些奇怪问题&#xff0c;例如&#xff1a;网络不畅&#xff0c;内存报警等等。所以在java中&#xff0c;将程…

NLP:文本预处理总览

1 用n-gram语言模型过滤低质量内容 使用n-gram语言模型对文本进行评估&#xff0c;从而过滤掉低质量的内容。具体来说&#xff0c;可以通过以下步骤进行&#xff1a; 1 将文本分成n-gram序列&#xff0c;其中n是一个整数。 2 使用已经训练好的n-gram语言模型对每个n-gram序列…

面试4年经验的测试员,开口就要25k,却连基础都不会,还不如招应届生!

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试…

冒泡排序实现(c++)

目录 冒泡排序简介&#xff1a; 冒泡排序原理&#xff1a; 动图演示&#xff1a; 代码实现&#xff1a; 冒泡排序简介&#xff1a; 冒泡排序&#xff0c;最优时间复杂度O(N)&#xff0c;平均时间复杂度O(N^2)&#xff0c;最差空间复杂度O(N)&#xff0c;平均时间复杂度O(1)…

基于ISIC数据集的皮肤病黑色素瘤分类研究与实现

摘要&#xff1a; 本项目利用残差网络结构对皮肤病图像进行分类&#xff0c;提高了皮肤病诊断的准确度。并结合Flask框架实现一个简单的Web应用&#xff0c;用户可以上传图像文件&#xff0c;经过预处理最后将预测结果显示在界面上。通过该系统&#xff0c;医生和研究人员可以快…

STM32单片机(三)第三节:GPIO输入

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

【计算机网络】 1.4——计算机网络的性能指标(重要!含计算)

计算机网络的性能指标 速率 数据量单位 bit Byte KB(2^10B) MB GB TB 数据量比较特别&#xff0c;使用2进制 kB210B而不是103&#xff0c;注意计算题 比特率/数据率单位 bpskb/s(10^3bps) Mb/s Gb/s Tb/s 带宽 *带宽在模拟信号系统中的意义 信号所包含的各种不同频率成…

WebSocket的那些事(4-Spring中的STOMP支持详解)

目录 一、序言二、Spring对STOMP支持的相关注解三、聊天Demo代码示例1、前端页面chat.html2、相关实体(1) 请求消息参数(2) 响应消息内容(3) 自定义认证用户信息 3、自定义用户认证拦截器4、WebSocket消息代理配置5、ChatController控制器 四、测试用例1、指定用户定时消息推送…

【实用篇】SpringCloud02

文章目录 SpringCloud020.学习目标1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置3&#xff09;运行两…

TCP通信(复习)

目录 TCP通信实现过程 1、socket函数与通信域 socket函数 参 数 bind函数 与 通信结构体 bind函数 参数 通信地址族与同届结构体 通用地址族结构体 IPV4地址族结构体 listen函数与accept函数 listen函数 accept函数 参 数 作 用 要实现进程间的通信必备&#xff1…

Map、Set和哈希表(数据结构系列14)

目录 前言&#xff1a; 1.搜索树 1.1概念 1.2插入 1.3查找 1.4删除 1.5二叉搜索树整体代码展示 2. Map和Set的讲解 2.1 Map的说明 2.1.1Map的方法 2.2 Set 的说明 2.2.1Set的方法 3.哈希表 3.1哈希表的概念 3.2哈希冲突 3.3冲突的避免 3.4哈希冲突的解决 3.4…

企业物资管理系统的设计与实现(ASP.NET,SQL)

论文阐述了企业物资管理系统的设计与实现&#xff0c;并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户登录&#xff0c;修改密码&#xff0c;物资的基本信息管理&#xff0c;出入库和损坏的管理已经综合查询等功能。 4.1 用户登录模块的实现 …

【滤波】非线性滤波

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第9章节09-Nonlinear-Filtering&#xff08;非线性滤波&#xff09;。 %matplotlib inline#format the book import book_format book_format.set_style()介绍 我们开发的卡尔曼滤波器使用线性方程组&#xff0…

【C++】类和对象——拷贝构造函数的概念、拷贝构造函数的特征

文章目录 1.拷贝构造函数1.1拷贝构造函数的概念1.2拷贝构造函数的特征 1.拷贝构造函数 在前面我们已经介绍了构造函数和析构函数的作用和使用方法&#xff0c;而拷贝构造函数则是在对象初始化时调用的一种特殊构造函数。拷贝构造函数可以帮助我们创建一个新的对象&#xff0c;该…

互联网中的web3.0和gpt有何联系?

文章目录 ⭐前言⭐web 3.0&#x1f496; web1.0-web3.0的概念 ⭐chatgpt&#x1f496; gpt的概念 ⭐总结⭐结尾 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享互联网中的web3.0和gpt的关系。 互联网的发展 第一台计算机的出现 世界上第一台通用计算机“ENIAC”于…

C语言(扫雷)

扫雷 开发过程开发思路菜单界面游戏界面的打印雷的随机产生扫雷以及判断胜利条件代码整合 开发过程 准备工作效果展示 准备工作&#xff1a; game.h 一个头文件–>声明函数 test.c 为主文件 game.c 为功能函数实现文件 效果展示 开发思路 菜单界面 游戏界面打印&…

二、机器人的结构设计

1 、螺丝连接的坚固性 坚固性是机器人能顺利完成指定任务的一个重要条件&#xff0c;无论我们程序设计的如何完美&#xff0c; 如果不能保证机器人具有坚固性和稳定性&#xff0c;就无法保证任务的顺利完成&#xff0c;机器人在运行时如 果发生散架和分裂都会影响其功能的实现…

阿里云的白名单规则如何实现IP限制和访问控制?

阿里云的白名单规则如何实现IP限制和访问控制&#xff1f;   [本文由阿里云代理商[聚搜云]撰写]   随着企业在云计算领域的深入应用&#xff0c;网络安全问题日益凸显。阿里云提供了一种名为“白名单”的规则&#xff0c;帮助用户实现IP限制和访问控制。本文将详细阐述阿里…

“ 最近 ” ,准备跳槽的可以看看

前两天跟朋友感慨&#xff0c;今年的铜三铁四、裁员、疫情导致好多人都没拿到offer!现在已经12月了&#xff0c;具体明年的金三银四只剩下两个月。 对于想跳槽的职场人来说&#xff0c;绝对要从现在开始做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也…

【ROS】ROS2中的概念和名词解释

1、工作空间 workspace ROS以固定的目录结构创建项目工程&#xff0c;项目根目录称为工作空间 1.1 典型工作空间结构 src&#xff1a; 代码空间&#xff1b; build&#xff1a; 编译空间&#xff0c;保存编译过程中产生的中间文件&#xff1b; install&#xff1a;安装空间…