前端为何要进行打包和构建

  • 体积更小(Tree-shaking、压缩、合并),加载更快
  • 编译高级语言或语法(TS,ES6+,模块化,scss)
  • 兼容性和错误检查(polyfill、postcss、eslint)
  • 统一、高效的开发环境
  • 统一的构建流程和产出标准
  • 集成到公司的构建规范

(代码相关、效率相关)

module chunk bundle 的区别

  • module 各个源码文件,webpack中一切皆模块
  • chunk 多模块合成,如entry import splitChunk
  • bundle 最终输出的文件

loader 和 plugin 的区别

  • loader模块转换器,如less -> css
  • plugin扩展插件,如HtmlWebpackPlugin

常见的loader和plugins

去webpack官方翻一下,能说出之前提到的即可

babel 和 webpack 的区别

  • babel JS新语法编译工具,不关心模块化
  • webpack 打包构建工具,是多个loader和plugin的集合

如何产出lib

参考dll.js那里

  1. output: {
  2. // lib的文件名
  3. filename: 'lodash.js'
  4. // 输出 lib 到 dist 目录下
  5. path: distPath,
  6. // lib 的全局变量名
  7. library: 'lodash'
  8. }

babel-polyfill 和 babel-runtime 的区别

  • babel-polyfill会污染全局
  • babel-runtime能解决这个问题
  • 产出第三方 lib 要用babel-runtime

webpack如何实现懒加载*

  • 结合import语法
  • 结合Vue React异步组件
  • 结合Vue-router 异步加载路由

Proxy为何不能被polyfill

Class可以用function模拟
Promise可以用callback模拟
但是Proxy的功能用Object.defineProperty无法模拟