本文主要参考学习了文章:zhuanlan.zhihu.com/p/44438844 和 juejin.cn/post/684490…
简述
webpack
是前端构建工具,会递归解析入口所需要加载的资源文件,用不同的loader
处理文件,用plugin
来扩展webpack的功能,输出一个或多个bundle
。
webpack的本质:JS静态打包工具,当处理应用时,会在内部构建一个依赖图 dependency graph,这个依赖图会映射项目所需的模块,然后生成bundle。
原生webpack只解析 JavaScript
和 JSON
格式,其他格式需要使用 loader 解析,如 css-loader, sass-loader, style-loader, url-loader 等。
wepack的核心
- entry 入口: 指示 webpack 使用哪个模块;
- output 输出: 指示 webpack 向哪里输出 bundle;
- loader 加载器:把 JS/JSON 以外的文件转译成有效模块;
- plugin 插件:打包优化、资源管理等
配置文件
可在 webpack.config.js
中配置,需要下载 webpack-dev-server
module.exports = {
entry: path.resolve(...)
output: {
path: path.resolve(...)
filename: ...
}
devServer: {...}
module: {
rules: [
{test: /\.css$/, use: ['css-loader', 'style-loader'...]}
{test: /\.scss/, use: [...]}
...
]
}
plugins: [
new HTMLWebpackPlugin({...})
new Webpack.HotModuleReplacementPlugin
]
}
loader 和 plugin
区别
- loader是"加载器",webpack把文件视为模块,原生webpack只解析js文件,其他文件类型的解析需要使用loader,所以loader的作用是让webpack拥有加载解析非js文件的能力。
- plugin是"插件",用于扩展webpack的功能,让webpack更灵活。webpack在运行的时候会广播很多事件,plugin可以监听这些事件,或者在目标时间通过webpack提供的api改变输出结果。
常见 loader 和 plugin
- image-loader 加载压缩图片文件
- babel-loader 把es6转换成es5
- css-loader 加载css,支持模块化、压缩和文件导入
- style-loader 把css代码注入到js中,通过DOM操作去加载CSS
- commons-chunk-plugin 提取公共代码
- uglifyjs-webpack-plugin 通过uglifyes压缩es6代码
Vue 如何按需加载代码
Vue里的按需加载,很多组件库已经提供了现成的解决方案了。如 Element 出品的 babel-plugin-component
和 AntDesign 出品的 babel-plugin-import
安装插件后,在 .babelrc
配置,或 babel-loader
参数里配置,具体的lib名称+想要的style lib名称,即可实现组件按需加载
如何提高构建速度
- 在多入口情况下,使用
commons-chunk-plugin
来提取公共代码 - 使用
uglifyjs-webpack-plugin
压缩ES6代码 - 使用
webpack-gulify-parallel
提升 uglifyPlugin 的压缩速度 - 通过 externals 配置提取常用库
- 使用 tree-shaking 和 scope hoisting 剔除多余的代码
转译的文件过大怎么办
- 提取公共代码
commons-chunk-plugin
- 压缩代码,删除多余的代码(
uglifyjs-webpack-plugin
, ParallelUglifyPlugin, cssnano etc.) - 用 CDN 而非静态资源路径
- 删除死代码(tree-shaking),将代码中永远不会走到的片段删除。可以通过在启动 webpack 时追加参数
--optimize-minimize
来实现
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!