• webpack六探-打包分析、懒加载、浏览器缓存、shimming、环境变量


    打包分析:

    我们可以借助一些工具,来分析打包出来的文件,来看它是否合理。

    官方指令:https://github.com/webpack/analyse
    我们只需在package.json的打包命令中加入 --profile --json > stats.json ,如:

    "devbuild": "webpack --profile --json > stats.json --config ./build/webpack.dev.js",

    就会在打包时生成一个stats.json文件,然后将文件在http://webpack.github.io/analyse/中打开即可看到一些打包信息。
    也可以通过一些第三方分析工具进行分析:https://www.webpackjs.com/guides/code-splitting/#bundle-%E5%88%86%E6%9E%90-bundle-analysis-

    懒加载:

    懒加载不是webpack中的概念,懒加载是在用户需要的时候再去加载相应的模块或者依赖,比如当我们点击按钮的时候才需要用到它,那么我们就不需要在一开始就加载进来,而是采用异步加载的方式。懒加载可以提升应用的初始加载速度,但是并不能提升用户体验(点击按钮加载相关依赖耗时,性能差),所以需要用到Prefetch/Preload

    prefetch是在主要js加载完成后,带宽空闲的时候去加载相关依赖,如用户进入页面后去加载登录模块,就不需要在点击的时候再去加载;
    preload是和主要js一起加载,所以更加推荐使用prefetch
    webpack中prefetch的使用:import(/* webpackPrefetch: true */ 'LoginModal');

    浏览器缓存:

    当打包生成的js文件过大时,会产生警告,如果要去掉警告,只要在webpack.common.js中增加设置:performance:false,
    当我们上线的时候需要加一个hash值,以免修改内容重新上传以后用户还是拿到缓存中的值,所以需要修改output:

    output:{
        filename: '[name].[contenthash].js',
        chunkFilename:'[name].[contenthash].js',
    }

    在老一些的webpack4版本中还需要配置:

    optimization: {
        runtimeChunk:{
            name:'runtime'
        },
        ...
    }

    因为业务(main.js)和库(vendors.js)之间存在关联(manifest),它们之间的关系放在runtime.js当中,而新版本配置了这个也不会有什么问题,所以可以直接配置上。

    shimming(垫片):

    为了解耦,webpack是基于模块进行打包的,所以当我们引入的库(A)是基于另一个库(B)的时候,理论上就需要先引入库(A),这样明显是不符合需求的,而webpack当中有一个功能帮我们解决了这个问题:

    plugins: [
        ...
        new webpack.ProvidePlugin({
            $:'jquery'
        })
    ],

    上例是指,当我们使用的库中有需要用到jquery的时候(如jquery.ui.js),会先自动加载jquery库。也可以这样使用:

    plugins: [
        ...
        new webpack.ProvidePlugin({
            _join:['lodash','join']
        })
    ],

    以上是指当我们使用_join方法的时候,会先加载lodash中的join方法

    当我们在模块中输出 this === window 的时候,会发现结果是false,因为模块中的this都指向自身,那么当我们需要将this指向window的时候需要借助一个loader:

    npm install imports-loader -D

    {
        test: /.js$/,
        exclude: /node_modules/,
        use:[{
            loader: "babel-loader"
        },{
            loader:'imports-loader?this=>window'
        }]
    }

    环境变量的使用方法:

    我们除了使用开发和生产环境的webpack配置,还可以根据环境变量不同来区分打包内容,使用函数的形式进行导出:

    module.exports=env=>{
        if(env && env.production){
            return merge(commonConfig,prodConfig);  // 生产环境
        }else{
            return merge(commonConfig,devConfig);   // 开发环境
        }
    }

    那么env该怎么传入呢?需要在package.json中进行配置:
    "build": "webpack --env.production --config ./build/webpack.common.js"
    开发环境就不需要传入

  • 相关阅读:
    [Python+OpenCv]近似图像差异检测
    解决github登录不上
    aws 知识汇总
    ansible work 案例
    git命令
    Google Chrome浏览器离线安装包下载方式
    物理机U盘安装银河麒麟linux操作系统注意事项
    微信云函数的创建与配置
    CentOS6.5升级OpenSSH版本
    linux下oracle数据库定时备份
  • 原文地址:https://www.cnblogs.com/jingouli/p/12255884.html
Copyright © 2020-2023  润新知