常见loader和plugin有哪些?两者的区别是什么?
常见loader
babel-loader
:把JS/TS变成JS(将ES6语法转换为ES5语法)ts-loader
:把TS变成JS,并提示类型错误markdown-loader
:把markdown变成htmlhtml-loader
:把html变成js字符串sass-loader
:把sass/scss变成csscss-loader
:把CSS变成JS字符串style-loader
:把js字符串变成style标签postcss-loader
:把CSS成更优化的CSSvue-loader
:把单文件组件(SFC)变成JS模块.vue
文件拆解为模板(Template)、脚本(Script)和样式(Style)三部分,并分别交给对应的 Webpack Loader 处理- template -> js渲染函数
- script -> 通过 Babel 转译
- style -> css
file-loader
:处理静态资源文件,引用文件路径url-loader
:可以将小文件转换为base64的urlthread-loader
:用于多进程打包
sass-loader
、css-loader
、style-loader
一般一起使用。
参考链接:webpack-loader文档
常见plugin
html-webpack-plugin
:用于创建HTML页面并自动引入JS和CSSclean-webpack-plugin
:用于清除之前打包的残余文件(rm -rf dist
也可以实现)mini-css-extract-plugin
:用于将JS中的CSS抽离成单独的CSS文件SplitChunksPlugin
:用于代码分包(Code Split)DllPlugin
+DllReferencePlugin
:用于避免大依赖被频繁重新打包,大幅降低打包时间eslint-webpack-plugin
:用于在打包时检查代码中的错误DefinePlugin
:用于在 webpack config 里定义全局变量copy-webpack-plugin
:用于拷贝静态文件到distTerserPlugin
:用于压缩JS代码
两者的区别
loader
是文件加载器- 功能:能够对文件进行编译、优化、混淆、压缩等处理,比如
babel-loader
/vue-loader
- 运行时机:在创建最终产物之前运行
- 功能:能够对文件进行编译、优化、混淆、压缩等处理,比如
plugin
是webpack的插件- 功能:能够实现更多功能,比如定义全局变量、Code Split、加速编译等
- 运行时机:在整个打包过程(以及前后)都能运行
webpack-bundle-analyzer 插件可以用于分析打包后的文件大小和依赖关系