webpack入门学习6(为webpack分离开发环境和生产环境、优化打包速度)

    科技2022-07-11  81

    区分开发环境和生产环境

                  由于开发环境和生产环境的构建目标差异很大。在开发环境中,我们需要具有强大的、具有实时重新加载或热模块替换能力 和 localhost server。而在生产环境中,我们的目标则转向于关注更小的 bundle,以及资源的优化,以改善加载时间。所以我们通常建议为每个环境编写彼此独立的 webpack 配置。

                   1.安装插件

                           命令行输入:npm install --save-dev webpack-merge

                    2.配置

                           2.1拆分文件

                                    我们可以将webpack.config.js拆分为三个文件,分别是webpack.common.conf.js、webpack.dev.conf.js和webpack.prod.conf.js。在根目录下创建一个config文件夹,然后分别创建这三个文件:

                              webpack.common.conf.js是放一些我们公用的配置,比如入口entry、出口output、常用loader以及插件等。

                              webpack.dev.conf.js是在开发环境上的配置,比如devServer配置、模块热替换等方便开发的配置。

                              webpack.prod.conf.js是在生产环境上的配置,比如提取分离css、压缩css和js等。

                         2.2修改package.json文件中的script 

                         2.3webpack.common.conf.js

     

                         2.4webpack.dev.conf.js 

                       

                         2.5webpack.prod.conf.js

     

                 此时输入npm run build进行打包,发现打包后的build文件夹到了config目录下,因此要修改output出口:

                     改为:

     

     

    优化打包速度 

              1.减少文件搜索范围

                           1.1优化resolve.extensions配置

                                      在导入语句没带文件后缀时,Webpack 会自动带上后缀后去尝试询问文件是否存在。

                                      在配置 resolve.extensions 时你需要遵守以下几点,以做到尽可能的优化构建性能:

                                               1.1.1后缀尝试列表要尽可能的小,不要把项目中不可能存在的情况写到后缀尝试列表中。

                                               1.1.2频率出现最高的文件后缀要优先放在最前面,以做到尽快的退出寻找过程。

                                               1.1.3在源码中写导入语句时,要尽可能的带上后缀,从而可以避免寻找过程。例如在你确定的情况下把 require('./data') 写成 require('./data.json') 。

                                       例如:

                           1.2优化 resolve.modules 配置

                                      resolve.modules 用于配置 Webpack 去哪些目录下寻找第三方模块。

                                      resolve.modules 的默认值是 ['node_modules'],会采用向上递归搜索的方式查找.

                                  例如:

                           1.3优化resolve.alias配置

                                     resolve.alias 配置项通过别名来把原导入路径映射成一个新的导入路径。

    例如:

          

                           1.4缩小文件匹配范围

                                     Include:需要处理的文件的位置

                                     Exclude:排除掉不需要处理的文件的位置

                                  

                   接下来按这四步在config文件里进行优化:

              2.设置noParse

                           防止 webpack 解析那些任何与给定正则表达式相匹配的文件。忽略的文件中不应该含有 import, require, define 的调用,或任何其他导入机制。忽略大型的 library 可以提高构建性能。比如jquery、elementUI等库。

                                例如:

                             在node_modules文件夹下找到jquery文件夹,按正则匹配。 

              3.给babel-loader设置缓存

                             babel-loader 提供了 cacheDirectory特定选项(默认 false):设置时,给定的目录将用于缓存加载器的结果。

              4.使用happyPack

                             HappyPack的基本原理:在webpack构建过程中,我们需要使用Loader对js,css,图片,字体等文件做转换操作,并且转换的文件数据量也是非常大的,且这些转换操作不能并发处理文件,而是需要一个个文件进行处理,HappyPack的基本原理是将这部分任务分解到多个子进程中去并行处理,子进程处理完成后把结果发送到主进程中,从而减少总的构建时间。

                           4.1安装插件

                                       命令行输入:npm install happypack --save-dev

                           4.2配置webpack.common.conf.js文件 

     

    Processed: 0.010, SQL: 8