总结Ⅷ-框架篇之TypeScript&Webpack

199 阅读2分钟

TypeScript

  1. never 类型是什么?
    不应该出现的类型 尤雨溪的答案:www.zhihu.com/question/35…
  2. TypeScript 比起 JavaScript 有什么优点?
    提供了类型约束,因此更可控、更容易重构、更适合大型项目、更容易维护

WebPack

1. 有哪些常见 loader 和 plugin,你用过哪些?区别?

loader :加载器,作用于文件,用来加载某些资源文件。

  • file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件
  • url-loader:和 file-loader 类似,但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去
  • source-map-loader:加载额外的 Source Map 文件,以方便断点调试
  • image-loader:加载并且压缩图片文件
  • babel-loader:把 ES6 转换成 ES5
  • css-loader:加载 CSS,支持模块化、压缩、文件导入等特性
  • style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS。
  • eslint-loader:通过 ESLint 检查 JavaScript 代码

plugin:插件,直接作用于webpack,用来扩展webpack的功能

  • commons-chunk-plugin:提取公共代码

具体区别:

  • Loader直译为"加载器"。Webpack将一切文件视为模块,但是webpack原生是只能解析js文件,如果想将其他文件也打包的话,就会用到loader。 所以Loader的作用是让webpack拥有了加载和解析非JavaScript文件的能力。
  • Plugin直译为"插件"。Plugin可以扩展webpack的功能,让webpack具有更多的灵活性。 在 Webpack 运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果。

2. 如何按需加载代码:懒加载

动态import 语法

import('./xxx.css')
import('./xxx.css').then(fn1,fn2)//进阶

3. 如何提高构建速度?

Dllplugin:用某种方法实现了拆分 bundles,同时大幅度提升了构建的速度。

Code splitting:代码分割是将代码划分为可以按需/同时加载的多个 bundles 或组件。

happypack :使用多核cpu进行打包,多线程加速编译。

4. 转义出的文件过大怎么办?

  • 删除不必要的文件

  • 使用CommonsChunkPlugin来提取公共代码(但最新的webpack已经不使用这个插件了)

  • 去掉开发环境下的某些配置

  • 压缩css,js,图片

  • import()按需加载文件