Typeof

再出发!

导航

前端基础知识学习第九节(Webpack篇)

1.

  babel的stage都有哪些值,分别代表什么含义?

  答案:
  我们在日常的开发中会用babel把ES6代码编译成浏览器支持的ES5代码,针对babel的一些配置在通常.babelrc文件中,其中有一个配置选项就是"stage-0"、
  "stage-1"、"stage-2"、"stage-3",他们分别代表的含义是:
  "stage-0": 包含了"stage-1" "stage-2" "stage-3"的所有功能同时还另外支持两个插件 transform-do-expressions和transform-function-bind
  "stage-1": 包含了"stage-2" "stage-3"的所有功能
  "stage-2": 包含了"stage-3"的所有功能
  "stage-3": 支持async和await,这个功能很实用,可以让你以“同步”的思维写代码
  在实际的开发中可以根据需要来设置具体stage值,如果想使用大而全的功能就设置成"stage-0",如果想限制开发人员使用比较新的功能则可以设置成其他stage值,
  以上的设置只是针对babel 7.0以前版本,根据官方最新版本7.0的说明,已经废弃了stage的预设
  参考:https://babeljs.io/blog/2018/07/27/removing-babels-stage-presets

2.

  webpack hot reload实现原理?

  答案:
  1)webpack编译期,为需要热更新的entry注入热更新代码(EventSource通信)
  2)页面首次打开后,服务端与客户端通过EventSource建立通信渠道,把下一次的hash返回给客户端
  3)客户端获取到hash,这个hash将作为下一次请求服务端hot-update.js和hot-update.json的hash
  4)修改页面代码后,webpack监听到文件修改,开始编译,编译完成后,发送build消息给客户端
  5)客户端使用hash向服务端发送ajax请求获取hot-update.json,发送GET请求获取hot-update.js
  6)hot-update.js插入成功后,执行hotAPI的createRecord和reload方法,获取到Vue组件的render方法,重新render组件,实现UI自动更新
  参考:https://www.jianshu.com/p/652fbae768bf

3.

  webpack打包慢如何优化?

  答案:
  1)对公共库文件(Vue、React、React-dom、Axios等)放到CDN服务器,通过script标签单独引用,不通过Webpack进行打包,然后在Webpack
  配置里使用expose-loader、externals、ProvidePlugin提供给模块内部使用相应的变量
  use: [
    {
      loader: 'expose-loader',
      options: 'Vue'
    }
  ]
  externals: {
    Vue: 'Vue'
  }
  new webpack.ProvidePlugin({
    Vue: 'Vue'
  })
  2)使用DllPlugin和DllReferencePlugin,这种方式其实和externals是类似的,主要用于有些模块没有CDN资源可以通过<script>引用的情况,Dll是
  动态链接库的意思,实际上就是将这些npm打包生成一个JSON文件,这个文件里包含了npm包的路径对应信息,这两个插件要一起使用
  3)提取公共代码,使用CommonsChunkPlugin提取公共的模块,可以减少文件体积,也有助于浏览器缓存
  4)使用HappyPack来加速构建,HappyPack会采用多进程去打包构建,使用方式还是蛮简单的,但并不是支持所有loader

posted on 2020-12-07 22:38  Typeof  阅读(78)  评论(0编辑  收藏  举报