zoukankan      html  css  js  c++  java
  • webpack学习笔记

    极客时间  玩转webpack学习记录

    github地址: https://github.com/worldtanjj/geektime-webpack-course

    只介绍常用的 plugin和loader 具体用法google或者看github实例

    解析 es6 用 babel-loader

    解析css 使用 style-loader, css-loader, less-loader , css打包成单据css文件使用 MiniCssExtractPlugin

    解析图片字体 使用 url-loader 或者 file-loader

    文件指纹策略 : 打包时候给output文件名加一些hash之类的

      js: 设置output的filename, 使用 [chunkhash]

      css: 设置 MiniCssExtractPlugin的filename 使用 [contenthash]  

      图片: 设置 file-loader的name 使用 [hash]

    代码压缩:

      js => 内置了 uglifyjs-webpack-plugin

      html => html-webpack-plugin

      css => optimize-css-assets-webpack-plugin

     

    webpack热更新: webpack-dev-server

    自动清理构建目录文件: clean-webpack-plugin

    自动补全css3前缀(让css3适配不同的浏览器内核) : postcss-loader +  autoprefixer

    移动端 px自动转换为rem : px2rem-loader

      这个loader放在 postcss-loader 下面不然报错 :   不识别: 

      原因可能是 postcss-loader会把css改变为  display:-ms-flexbox;display:flex 这种, 导致 px2rem-loader 识别不了

        ⻚⾯渲染时计算根元素的 font-size 值 ·可以使⽤⼿淘的lib-flexible库

    静态资源内联 :

      raw-loader 内联 html  html中这样用  <%= require('raw-loader!./meta.html').default %>
           内联 JS 
      html-inline-css-webpack-plugin 内联css
     
    多⻚⾯打包基本思路
      每个⻚⾯对应⼀个 entry,⼀个 html-webpack-plugin
      利⽤ glob.sync  用法: entry: glob.sync(path.join(__dirname, './src/*/index.js')),   动态获取 entry 和设置 html-webpack-plugin
     
    source map
      作⽤:通过 source map 定位到源代码   webpack下配置:  devtool: "source-map"
        其他参数看ppt
     
    利⽤ SplitChunksPlugin 进⾏公共脚本分离

        触发这个splitChunksPlugin切割代码的有以下几点:

        1.共用的module (node_module文件夹的那些模块)和公共的chunk

        2.输出的chunk体积大于30kb的(指还没有gz和min喔)

        3.当加载请求数要求最大并行数小于或等于5时

        4.初始化页面,加载请求数要求最大并行请求要小于或等于3时

     

    tree shaking(摇树优化) 

      tree shaking 就是只把⽤到的⽅法打⼊ bundle ,没⽤到的⽅法会在 uglify 阶段被擦除掉

      production mode的情况下默认开启

      将 mode 设置成 none 的时候,就不会自动使用 webpack 的 terser-webpack-plugin 插件了 即不会进行tree shaking

     

    webpack打包后的代码存在⼤量闭包代码

      ⼤量作⽤域包裹代码,导致体积增⼤(模块越多越明显)

      运⾏代码时创建的函数作⽤域变多,内存开销变⼤

     

    scope hoisting 原理:将所有模块的代码按照引⽤顺序放在⼀个函数作⽤域⾥,然后适当的重命名⼀ 些变量以防⽌变量名冲突
    可以简单的把scope hoisting理解为是把每个模块被webpack处理成的模块初始化函数整理到一个统一的包裹函数里,也就是把多个作用域用一个作用域取代,以减少内存消耗并减少包裹块代码,从每个模块有一个包裹函数变成只有一个包裹函数包裹所有的模块,但是有一个前提就是,当模块的引用次数大于1时,比如被引用了两次或以上,那么这个效果会无效,也就是被引用多次的模块在被webpack处理后,会被独立的包裹函数所包裹

      作者回复: 理解的完全正确。Scope housting对模块的引用次数大于1次是不产生效果的,这个其实也很好理解,如果一个模块引用次数大于1次,那么这个模块的代码会被内联多次,从而增加了打包出来的js   bundle的体积。

    webpack mode 为 production 默认开启

    或者 mode 不为 production时 plugins添加     new webpack.optimize.ModuleConcatenationPlugin()

  • 相关阅读:
    java图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
    java树形菜单实现
    vue-resource的使用,前后端数据交互
    如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件
    Git以及TortoiseGit的下载安装使用
    springBoot总结
    idea如何设置类头注释和方法注释
    (document).height()与$(window).height()
    使用js对中文进行gbk编码
    JS中URL编码参数(UrlEncode)
  • 原文地址:https://www.cnblogs.com/xtxtx/p/14065787.html
Copyright © 2011-2022 走看看