webpack4 优化系列

简介: webpack4 优化系列

1、noParse

noParse 配置项可以让 Webpack 忽略对部分没采用模块化的文件的递归解析和处理,这样做的好处是能提高构建性能。 我们对类似jq这类依赖库,一般会认为不会引用其他的包(特殊除外,自行判断)。所以,对于这类不引用其他的包的库,我们在打包的时候就没有必要去解析,这样能够增加打包速率。

noParse 是可选配置项,类型需要是 RegExp、[RegExp]、function 其中一个。例如想要忽略掉 jQuery 、ChartJS,可以使用如下代码:

module:{
    // 使用正则表达式
      noParse: /jquery|chartjs/
      // 使用函数,从 Webpack 3.0.0 开始支持
      noParse: (content)=> {
          // content 代表一个模块的文件路径
          // 返回 true or false
          return /jquery|chartjs/.test(content);
      }
}

2、HappyPack

基本原理: HappyPack 允许 Webpack 使用 Node 多线程进行构建来提升构建的速度。

安装 HappyPack

npm i -D happypack

webpack.config.js配置文件

const HappyPack = require('happypack');
const os = require('os');
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        //把对.js 的文件处理交给id为happyBabel 的HappyPack 的实例执行
         use: ['happypack/loader?id=happyBabel'],//这里的id=happyBabel要跟下边的对应
        //use: ['babel-loader'],
        //排除node_modules 目录下的文件
        exclude: /node_modules/
      },
    ]
  },
plugins: [
    new HappyPack({
        //用id来标识 happypack处理那里类文件
      id: 'happyBabel',//这个id值要跟上面对应
      //如何处理  用法和loader 的配置一样
      loaders: ['babel-loader?cacheDirectory=true'],
     // loaders: [{
     //   loader: 'babel-loader?cacheDirectory=true',
   //   }],
      //共享进程池
      threadPool: happyThreadPool,
      //允许 HappyPack 输出日志
      verbose: true,
    })
  ]
}

这里需要注意HappyPack 对大项目能缩短打包时间,对小项目可能还会增加打包时间,注意取舍。

3、DllPlugin

webpack dllplugin的配置其实就是用于生成动态链接库。

创建一个打包配置文件webpack.config.dll.js

const path = require('path');
const webpack = require('webpack');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
function resolve (dir) {
    return path.join(__dirname,'..' ,dir)
}
module.exports = {
    entry: {
        vueAll: ['vue','vue-router','axios','vuex']
    },
    output: {
        path: resolve('public'),
        filename: 'dll_[name].js',
        library: 'dll_[name]_[hash]'
    },
    devtool: false,
    plugins: [
        new CleanWebpackPlugin({}),//清楚打包
        new webpack.DllPlugin({
            // manifest文件中的name属性值, 需与output.library保持一致
            name: 'dll_[name]_[hash]',
            // mainfest文件输出路径和文件名称
            path: path.resolve(__dirname, "[name]-manifest.json")
        }),
        new UglifyJsPlugin({//压缩功能
            uglifyOptions: {
                warnings: false,
                drop_debugger: true,
                drop_console: true
            },
            // sourceMap: config.build.productionSourceMap,
            sourceMap: false,
            parallel: true
        })
    ]
}

我们执行上面的文件

"build:dll": "webpack --config build/webpack.config.dll.js" //根据自己的配置写

这样就会打包出一个dll_vueAll.js(是'vue','vue-router','axios','vuex'的包)和vueAll-manifest.json(是对应关系)的文件。

既然这里我们已经把'vue','vue-router','axios','vuex'打包好了,那么其他地方打包就应该把这几个文件排除。这样就需要webpack.DllReferencePlugin

plugins: [
    new webpack.DllReferencePlugin({
      manifest: require('./vueAll-manifest.json'),//这里路径根据自己文件目录书写,文件名就是上步打包出来的
    })
]

这样配置后打包时候就会把'vue','vue-router','axios','vuex'排除在外。在此还需要把已经打包好的dll_vueAll.js引入到模板文件index.html里。可以手动添加,但是太麻烦,我们用插件add-asset-html-webpack-plugin。

首先安装,然后配置

plugins: [
    new AddAssetHtmlPlugin({
        filepath: require.resolve('../public/dll_vueAll.js'),
        // 文件输出目录
        outputPath: 'dll',//根据自己情况填写
        publicPath: 'dll',//根据自己情况填写
        includeSourcemap: false  这个配置需要注意
    })

这样就会自动引入了。(需要注意new AddAssetHtmlPlugin需配置在new HtmlWebpackPlugin后边)

<body>
    <div id="app"></div>
    <script src="./dll/dll_vueAll.js"></script>
</body>


相关文章
|
7月前
|
JSON JavaScript 前端开发
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)(下)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
97 2
|
1月前
|
缓存 前端开发 JavaScript
Webpack与Babel的进阶配置与优化
通过以上的进阶配置和优化策略,可以更好地发挥`Webpack`与`Babel`的功能,提高项目的性能和开发效率。
|
4月前
|
缓存 前端开发 数据可视化
Webpack Bundle Analyzer:深入分析与优化你的包
Webpack Bundle Analyzer是一款可视化工具,帮助分析Webpack构建结果,找出占用空间较大的模块以便优化。首先需安装Webpack和Webpack Bundle Analyzer,接着在`webpack.config.js`中配置插件。运行Webpack后,会在`dist`目录生成`report.html`,展示交互式图表分析包大小分布。为优化可采用代码分割、Tree Shaking、压缩插件、加载器优化、模块懒加载、代码预热、提取公共库、使用CDN、图片优化、利用缓存、避免重复模块、使用Source Maps、优化字体和图标、避免全局样式污染以及优化HTML输出等策略。
169 3
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
58 6
|
1月前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
76 7
|
1月前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
53 2
|
6月前
|
缓存 JavaScript 前端开发
探讨如何通过一系列优化策略来提升TypeScript与Webpack的构建性能。
【6月更文挑战第11天】本文探讨了优化TypeScript与Webpack构建性能的策略。理解Webpack的解析、构建和生成阶段是关键。优化包括:调整tsconfig.json(如关闭不必要的类型检查)和webpack.config.js选项,启用Webpack缓存,实现增量构建,代码拆分和懒加载。通过这些方法,可以提升构建速度,提高开发效率。
84 0
|
7月前
|
JSON 前端开发 JavaScript
webpack学习笔记--优化
webpack学习笔记--优化
|
4月前
|
前端开发 JavaScript 开发者
Angular与Webpack协同优化:打造生产级别的打包配置——详解从基础设置到高级代码拆分和插件使用
【8月更文挑战第31天】在现代前端开发中,优化应用性能和加载时间至关重要,尤其是对于使用Angular框架的项目。本文通过代码示例详细展示了如何配置Webpack,以实现生产级别的打包优化。从基础配置到生产环境设置、代码拆分,再到使用加载器与插件,每个步骤都旨在提升应用效率,确保快速加载和稳定运行。通过这些配置,开发者能更好地控制资源打包,充分发挥Webpack的强大功能。
145 0
|
5月前
|
缓存 JSON 前端开发
Webpack打包优化实践
【7月更文挑战第17天】Webpack的打包优化是一个持续的过程,需要开发者根据项目的实际情况选择合适的优化策略。通过拆分代码、压缩代码、使用Tree Shaking、优化加载器配置、利用缓存以及进行性能分析,我们可以有效提升Webpack的打包效率和应用的加载