项目中webpack优化配置(1)

本文介绍了如何在项目中通过Webpack进行DLL分包来减少构建时间,利用resolve.modules和alias配置优化模块路径,以及使用TreeShaking技术剔除未用代码,提升开发效率和应用性能。
摘要由CSDN通过智能技术生成

项目中webpack优化配置

一. 开发效率, 体验

1. DLL(开发过程中减少构建时间和增加应用程序的性能)

使用 DllPlugin 进行分包,使用 DllReferencePlugin(索引链接) 对 manifest.json 引用,让一些基本不会改动的代码先打包成静态资源,避免反复编译浪费时间。

使用方式如下:

DLL 配置文件 comfig/dll.js

const path = require('path')
module.exports = {
  entry: [
    'vue',
    'vue-router',
    'axios',
    'element-ui',
    'echarts', // 可视化
    'clipboard', // 复制
    'crypto-js', // 加密
    'js-cookie',
    'js-md5',
  ],
  output: path.join(__dirname, '../public/vendor'),
  inject: true,
  open: false,
  cacheFilePath: path.resolve(__dirname, './public')
}

在vue.config.js,引入配置
···
const dllConfig = require(‘./config/dll’)
module.exports = {
publicPath: ‘/’,
outputDir: ‘’,
assetsDir: ‘static’,
pluginOptions: {
dll: dllConfig
},
}
···

在package.json中添加:

 "scripts": {
    "dll": "vue-cli-service dll",
  },

第一次dev时运行以下命令:

  // 打包第三方包,提高打包效率
  npm run dll

运行完之后,会在public目录下创建一个vendor文件夹,里面就是将部分引用的包,进行了预编译。
在这里插入图片描述

2. 优化resolve.modules配置和resolve.alias配置(避免输入很长的路径)

  • resolve.modules:告诉webpack去那个目录下查找引用的模块。

  • resolve.alias:使用别名,减少输入路径长度,相比resolve.modules,因为没有省略路径,会直接去别名路径查找,减少搜索时间。

优化引入模块的路径

{
  resolve: {
  alias: {
        '@': resolve('src'),
        '@bizComp': resolve('src/components-biz'),
        '@service': resolve('src/service'), // 接口
        '@utils': resolve('src/utils'),
        '@mixins': resolve('src/mixins')
      },
    modules: [
      path.resolve(__dirname, "src"),
      path.resolve(__dirname, "node_modules"),
      "node_modules",
    ],
  },
}

使用配置后的引入方式:
在这里插入图片描述

3. Tree Shaking 剔除无用死代码,缩小体积

Tree Shaking 是指在构建过程中通过静态分析,去除 JavaScript 中未被引用的死代码(未被使用的代码),以减小最终打包后文件的大小。
这个术语通常与使用 ES6 模块语法(import 和 export)的项目相关联,因为 ES6 模块系统允许静态分析,即在编译时就能确定模块的依赖关系。
Tree Shaking 的过程是这样的:

  1. 识别未被使用的代码: 构建工具(例如 Webpack)会分析你的代码,识别出哪些模块、变量或函数根本没有被其他部分引用或使用。
  2. 移除未被使用的代码: 一旦工具确定了哪些代码是“死”的,即未被引用的,它们就会被从最终生成的包中剔除,以减小打包后文件的体积。
    Tree Shaking 有助于优化你的应用程序,因为它可以去除未被使用的代码,减少最终部署时需要加载的文件大小,提高加载速度和性能。这对于大型的项目尤其重要,因为它们往往包含很多未被使用的功能或库。
    然而,Tree Shaking 并非适用于所有情况。例如,对于动态导入的模块、含有副作用但没有被标记为副作用的代码等,它可能无法完全消除所有未使用的代码。因此,在使用 Tree Shaking 时,需要注意一些限制和边界情况,并结合其他优化技术以达到最佳效果。

注:使用Tree Shaking, 包必须使用ES6模块语法,即export导出 和import ... from ... 引入函数

webpack配置

  optimization: {
    /**
     * usedExports 需要与 UglifyJsPlugin 或 TerserPlugin 等压缩插件配合使用,以便在打包过程中剔除未被使用的代码。
     */
    usedExports: true, // Webpack 会分析你的代码,只导出被使用的部分,而不包含未被使用的部分。这个选项在 Tree Shaking 中发挥了关键作用。
    sideEffects: true, // 告知 webpack 去辨识 package.json 中的 副作用 标记或规则
    minimize: true,
    minimizer: [
      new TerserJSPlugin({
        cache: true,
        parallel: true, 
        sourceMap: false,
      }),
    ],
  },

package.json

 "sideEffects": [
        "./src/utils.js" // 没副作用的路径--- 会移除没有被使用的代码和副作用代码
    ], 
    "sideEffects": true, // 纯粹的,无副作用 --- 会移除没有被使用的代码和副作用代码
    "sideEffects": false, // 都有副作用 ---- 不移除副作用代码

参考1

webpack优化配置包括通过配置`configureWebpack`和`chainWebpack`来修改webpack的默认配置,以实现不同的优化效果。 `configureWebpack`是用来修改webpack配置,它的配置内容会与webpack的默认配置进行合并。通过配置`configureWebpack`,我们可以对webpack的各个方面进行优化,比如优化代码分离、减小打包体积、使用CDN服务器等。例如,你可以在`configureWebpack`配置`optimization`选项来进行代码分离,通过指定`splitChunks`来实现将代码分离到不同的bundle,从而按需加载或并行加载这些文件。 `chainWebpack`则可以修改webpack的默认配置。通过配置`chainWebpack`,我们可以自定义webpack的打包过程,进行一些特定的优化。例如,你可以使用`exclude`和`cache-loader`等选项来优化打包速度。 总的来说,webpack优化配置可以分为两个方面:打包后的结果的性能优化和打包速度的优化。对于打包后的结果的性能优化,可以通过代码分离来实现。而对于打包速度的优化,可以利用webpack的默认优化配置,也可以根据项目的具体情况进行针对性的优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Webpack 配置优化](https://blog.csdn.net/weixin_42682011/article/details/116060572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [webpack性能优化方案(详细)](https://blog.csdn.net/weixin_57677300/article/details/130684139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Webpack优化配置缩小文件搜索范围](https://download.csdn.net/download/weixin_38698403/12766302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝with黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值