首页 > 其他分享 >webpack生产环境优化:多线程打包

webpack生产环境优化:多线程打包

时间:2023-08-28 22:34:50浏览次数:39  
标签:babel js loader webpack 进程 多线程 打包

转载请注明 来源:http://www.eword.name/
Author:eword
Email:[email protected]

webpack生产环境优化:多线程打包

多线程打包主要用于需要打包的文件较多的情况下提高打包效率,缩短打包时间。
注意:开启多进程打包时,进程开启大概需要600ms,进程通信也有开销。
建议:只有工作消耗时间比较长时,才开启多进程打包。否则可能开多进程打包后,花费的时间会更长。

一、下载插件

多线程打包需要插件thread-loader的支持。
这里使用[email protected]

> npm i -D [email protected]

二、核心配置

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/

// resolve用来拼接绝对路径的方法
const { resolve } = require('path');



module.exports = {
    // webpack配置
    // 入口起点文件
    entry: './src/js/index.js',
    // 输出
    output: {
        // 输出文件名
        filename: 'js/built.[contenthash:10].js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build'),
    },
    // loader的配置
    module: {
        rules: [

            // 详细loader配置
            //不同文件必须配置不同loader处理


           ……

            {
                // 以下 loader 只会匹配一个
                // 注意:不能有两项配置处理同一种类型的文件
                // 例如:js文件的语法检查和兼容性处理,不能放在同一个oneOf中。
                oneOf: [

                    ……

                    /*
                         js兼容性处理:babel-loader @babel/core @babel/preset-env
                         1.基本js兼容性处理 @babel/preset-env
                         问题:只能转换基本语法,如promise不能转换 
                         2.全部js兼容性处理 --> @babel/polvfill
                         问题:我只要解决部分兼容性问题,但是将所有兼容性代码全部引入,体积太大了~ 
                         3. 需要做兼容性处理的就做:按需加载 --> core-js
                         */
                    {
                        test: /\.(?:js|mjs|cjs)$/,
                        exclude: /node_modules/,
                        use: [
                            /* 
                                开启多进程打包 
                                进程启动大概为600ms,进程通信也有开销。
                                只有工作消耗时间比较长,才需要多进程打包     
                            */

                            {
                               loader: "thread-loader",
                               options:{
                                workers:2 //启用两个进程
                               }
                            },
                            {
                                // 指定检查的目录,或者配置排除某些文件夹
                                // include: [path.resolve(__dirname, 'src')], 
                                // 注意:只检查自己写的源代码,第三方的库是不用检查的,这里排除node_modules文件夹
                                loader: "babel-loader",
                                options: {
                                    // 预设:指示 babel 做怎么样的兼容性处理
                                    "presets": [
                                        [
                                            "@babel/preset-env",
                                            {
                                                // 按需加载
                                                useBuiltIns: 'usage',
                                                // 制定 core-js 版本
                                                corejs: {
                                                    version: 3
                                                },
                                                //指定兼容性做到哪个版本的浏览器
                                                targets: {
                                                    chrome: '60',
                                                    firefox: '60',
                                                    ie: '9',
                                                    safari: '10',
                                                    edge: '17'
                                                }
                                            }
                                        ]
                                    ],
                                    // 开启babel缓存
                                    //第二次构建时,会读取之前的缓存
                                    cacheDirectory: true
                                }
                            }
                        ],
                    },
                    
              ……
              
                ]// oneOf  [] end
            }// oneOf {} end
        ],
    },

            ……
            
    // 模式  development  开发环境,production 生产环境
    // mode: 'development',
    // 生产环境下会自动压缩js代码
    mode: 'production',
        
            ……

};

核心配置

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/
……
    {
        test: /\.(?:js|mjs|cjs)$/,
        exclude: /node_modules/,
        use: [
            /* 
                开启多进程打包 
                进程启动大概为600ms,进程通信也有开销。
                只有工作消耗时间比较长,才需要多进程打包     
            */
            "thread-loader",
            {
                loader: "babel-loader",
                options: {
                    // 预设:指示 babel 做怎么样的兼容性处理
                    "presets": [
                       ……
                    ],
                    // 开启babel缓存
                    //第二次构建时,会读取之前的缓存
                    cacheDirectory: true
                }
            }
        ],
    },

thread-loader通常配置在js兼容性检查中,当然也可以运用于其他loader配置。

OR

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/
……
    {
        test: /\.(?:js|mjs|cjs)$/,
        exclude: /node_modules/,
        use: [
            /* 
                开启多进程打包 
                进程启动大概为600ms,进程通信也有开销。
                只有工作消耗时间比较长,才需要多进程打包     
            */
            {
               loader: "thread-loader",
               options:{
                    workers:2 //启用两个进程
               }
            },
            {
                loader: "babel-loader",
                options: {
                    // 预设:指示 babel 做怎么样的兼容性处理
                    "presets": [
                       ……
                    ],
                    // 开启babel缓存
                    //第二次构建时,会读取之前的缓存
                    cacheDirectory: true
                }
            }
        ],
    },

配置开启的多进程数量

标签:babel,js,loader,webpack,进程,多线程,打包
From: https://www.cnblogs.com/eword/p/webpack202308274.html

相关文章

  • webpack生产环境优化:懒加载和预加载
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:懒加载和预加载一、直接加载浏览器一打开,直接加载了test.js这里使用了直接导入方式。直接导入:import{mul}from'./test';//./src/js/index.js//入口文件console.......
  • webpack生产环境优化:externals
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:externalsexternals配置主要是为了防止某些通过CDN引入的包被打包到输出的bundle中。一、核心配置/*webpack.config.jswebpack的配置文件路径:./webpack.config......
  • webpack生产环境优化:dll
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:dlldll动态链接库目的:单独的将多个指定的第三方库打包成一个chunk。意义:将不同的库分割开来,实现代码分割和避免重复打包,在节省打包时间的同时方便按需加载和预加载的实现......
  • vue3 + vite 动态引入不被打包的静态资源
    在开发中,通常会把一些静态资源放在assets文件夹下,但是assets目录下的内容是需要vite编译打包的,所以如果只是引用assets目录下的资源时,使用绝对路径、相对路径均可。但是,在开发中,我们经常会引用一些不被打包的资源,此时该资源是放在public目录下的,那么在引用时,路径的写法如下:不......
  • 多线程|死锁
    publicclassThreadDemo19{privatestaticObjecto1=newObject();privatestaticObjecto2=newObject();publicstaticvoidmain(String[]args){Threadt1=newThread(){publicvoidrun(){synchronized(o1)......
  • 集合遍历使用多线程并行执行
    在业务中常常有这样的需求,需要遍历集合,分别处理,相互之前单独处理,互不影响。为了充分利用服务器资源,可以使用多线程来执行。parallelStream创建一个并行流,使用ConcurrentHashMap使多线程情况下线程安全CompletableFuture.allOf是所有线程全部执行完获得结果CompletableFuture.......
  • cocos2dx 如何编译android 打包
    先要配置NDK,然后启动CMD命令进入到自己的游戏根目录,我的是starGame,所以如上所示:......
  • cocos2dx 3.x打包出现Can't find config file .cocos-project.json in path
    youcanjustcreatea.cocos-project.jsonfileyourself.Allitcontainsisthefollowingcode: {"project_type":"cpp"如果是lua工程话,直接修改成lua即可。......
  • Java多线程-实现 生产者-消费者 模式
    多线程实现生产者消费者,堆积满100后停止生产,消费到小于50后继续生产这是一种写法,但是我觉得不太好:它通过循环创建了很多的线程,每个线程只消费/生产一次它使用notifyAll()通知所有的线程唤醒,包括生产者和消费者,感觉产品数量永远也达不到50publicclassProducerimpleme......
  • webpack 概念
    webpack概念本质上,webpack是一个用于现代JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependencygraph),然后将你项目中所需的每一个模块组合成一个或多个bundles,它们均为静态资源,用于展示你的内容。在......