1.webpack是什么?
webpack一个用于现代javascript应用程序的静态模块打包工具
2.webpack的配置有哪些?
入口:entry, 出口:output, mode, plugin, loader;
入口:指示webpack使用哪个模块作为构建其内部依赖图的开始。默认值是:'./src/index.js'。
出口:告诉webpack在哪里输出它所创建的bundle,以及如何命名这些文件,主要输出文件的默认值是'./dist/main.js'。
mode:提供 mode 配置选项,告知 webpack 使用相应模式的内置优化, development(开发环境), production(生产环境),none(不使用任何默认优化选项)。
loader:这是 webpack 开箱可用的自带能力,loader 用于转换某些类型的模块(编译兼容 充当一个翻译语法的功能)。
plugin:打包优化,资源管理,注入环境变量等。
3.有哪些常用的loader?
raw-loader:加载文件原始内容(utf-8)
file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件 (处理图片和字体)
url-loader:与 file-loader 类似,区别是用户可以设置一个阈值,大于阈值会交给 file-loader 处理,小于阈值时返回文件 base64 形式编码 (处理图片和字体)
source-map-loader:加载额外的 Source Map 文件,以方便断点调试
svg-inline-loader:将压缩后的 SVG 内容注入代码中
image-loader:加载并且压缩图片文件
json-loader 加载 JSON 文件(默认包含)
handlebars-loader: 将 Handlebars 模版编译成函数并返回
babel-loader:把 ES6 转换成 ES5
ts-loader: 将 TypeScript 转换成 JavaScript
awesome-typescript-loader:将 TypeScript 转换成 JavaScript,性能优于 ts-loader
sass-loader:将SCSS/SASS代码转换成CSS
css-loader:加载 CSS,支持模块化、压缩、文件导入等特性
style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS
postcss-loader:扩展 CSS 语法,使用下一代 CSS,可以配合 autoprefixer 插件自动补齐 CSS3 前缀
eslint-loader:通过 ESLint 检查 JavaScript 代码
tslint-loader:通过 TSLint检查 TypeScript 代码
mocha-loader:加载 Mocha 测试用例的代码
coverjs-loader:计算测试的覆盖率
vue-loader:加载 Vue.js 单文件组件
i18n-loader: 国际化
cache-loader: 可以在一些性能开销较大的 Loader 之前添加,目的是将结果缓存到磁盘里.
4.有哪些常见的plugin?
define-plugin:定义环境变量 (Webpack4 之后指定 mode 会自动配置)
ignore-plugin:忽略部分文件
html-webpack-plugin:简化 HTML 文件创建 (依赖于 html-loader,将html, js, css糅合在一起)
web-webpack-plugin:可方便地为单页应用输出 HTML,比 html-webpack-plugin 好用
terser-webpack-plugin: 支持压缩 ES6
webpack-parallel-uglify-plugin: 多进程执行代码压缩,提升构建速度
mini-css-extract-plugin: 分离样式文件,CSS 提取为独立文件,支持按需加载 (替代extract-text-webpack-plugin)
serviceworker-webpack-plugin:为网页应用增加离线缓存功能
clean-webpack-plugin: 目录清理
ModuleConcatenationPlugin: 开启 Scope Hoisting
speed-measure-webpack-plugin: 可以看到每个 Loader 和 Plugin 执行耗时
webpack-bundle-analyzer: 可视化 Webpack 输出文件的体积 (业务组件、依赖第三方模块)
copy-webpack-plugin: 把文件从一个位置拷贝到另外一个位置
uglifyjs-webpack-plugin: 压缩代码用的
5.如何提升webpack的打包性能?
一. 跟上技术的迭代,尽可能使用新版本的webpack,node,npm, yarn
二. 在尽可能少的模块上应用loader来提升webpack的打包速度, 如配置exclude: /node_modules/
三. Plugin尽可能精简,并确保可靠,如使用optimize-css-assets-webpack-plugin插件对css进行压缩
四. 减少extensions的配置,如extensions: ['.js', '.jsx']
五. 使用CommonsChunkPlugin提取公共模块