惠州网站推广排名,公司推广做哪个网站吗,wordpress dx seo,宁波seo教程app推广文章目录 前言包准备CDN 集成代码分包Tree Shaking原理实现条件#xff1a;解决 treeShaking 无效方案#xff1a;示例代码#xff1a; 热更新#xff08;HMR#xff09; 前言 Webpack 作为现代前端开发中的核心构建工具#xff0c;提供了丰富的特性来帮助开发者优化和打… 文章目录 前言包准备CDN 集成代码分包Tree Shaking原理实现条件解决 treeShaking 无效方案示例代码 热更新HMR 前言 Webpack 作为现代前端开发中的核心构建工具提供了丰富的特性来帮助开发者优化和打包应用。本文将探讨 Webpack 的 CDN 集成、代码分包、Tree Shaking 以及热更新HMR等关键特性。 我们将使用前一篇文章中的代码然后我们引入一些图片、css 等资源文件已经一些常用的第三方库如lodash 包准备
安装文件处理的 loader 和后续分析的包
yarn add webpack-bundle-analyzer terser-webpack-plugin url-loader file-loader -D在 webpack.config.js 添加 处理文件的 loader , file-loader
module: {rules: [// ... 省略{test: /\.(jpg|png|jpeg|gif)$/,use: [file-loader],},],},
修改 list.vue
templatedivimg :srcjsJpg /h3前端三大框架:/h3ulli v-foritem in list :keyitem{{ item }}/li/ul/div
/templatescript
import jsJpg from /static/js.jpg
export default {name:List,data() {return {list: [Vue, React, Angular],jsJpg};},
};
/script
运行结果 打包结果
执行 yarn build CDN 集成 CDN内容分发网络的使用可以显著提高资源加载速度特别是对于静态资源。 我们可以有三种种方式来完成
output 配置中的 publicPath
这里我们如果没有 cdn可以通过修改 hosts 文件的方式, 文件路径C:\Windows\System32\drivers\etc添加内容127.0.0.1 ziyu.aliyun.com, 最后我们添加启动端口 const mode process.env.NODE_ENV development ? development : production;
const isDev process.env.NODE_ENV development;output: {path: path.resolve(__dirname, dist),filename: bundle.js,publicPath: isDev ? / : http://ziyu.aliyun.com:3000/,},添加前运行文件 打包运行后文件效果 配置externals属性将某些依赖项从打包文件中排除并通过 CDN 链接直接引入。
externals: {vue: Vue,vue-router: VueRouter,
}在 html 文件中添加
!DOCTYPE html
html langenheadmeta charsetUTF-8 /meta nameviewport contentwidthdevice-width, initial-scale1.0 /title% htmlWebpackPlugin.options.title %/titlescript srchttps://cdn.jsdelivr.net/npm/vue2.7.16/dist/vue.js/scriptscript srchttps://unpkg.com/vue-router3.0.0/dist/vue-router.js/script/headbodydiv idapp/div/body
/html添加打包分析器
const BundleAnalyzerPlugin require(webpack-bundle-analyzer).BundleAnalyzerPluginplugins: [// ...new BundleAnalyzerPlugin({analyzerMode: static,reportFilename: report.html,openAnalyzer: false,}),],
执行 yarn build, 查看report.html , 没有 vue和vue-router的代码 使用html-webpack-plugin插件在生成的 HTML 文件中动态插入 CDN 资源链接。
// 1. 配置插件new HtmlWebpackPlugin({title: vuew webpack,template: ./src/index.html,}),
// 2. 配置html// 可以随便添加cdn代码分包 代码分包是 Webpack 优化应用加载性能的重要手段。通过将代码分割成多个包可以实现按需加载减少单次加载的数据量。 代码准备
我们新建一个utils/calc.js文件然后补充代码
export const sum (a, b) a b;常规使用 hello.vue 中引用
templatebutton clickcalcRes计算 : 5 6 结果/button {{ res }}
/templatescript
import { sum } from ../utils/calc;
export default {data() {return {res: 0,};},methods: {calcRes() {this.res sum(5, 6);},},
};
/script打包结果
import() 分包
templatebutton clickcalcRes计算 : 5 6 结果/button {{ res }}
/templatescript
import { sum } from ../utils/calc;
export default {data() {return {res: 0,};},methods: {calcRes() {this.res import(/* webpackChunkName: calc */ ../utils/calc).then(({ sum }) {this.res sum(5, 6);});},},
};
/script自动分包Webpack 的SplitChunksPlugin插件可以自动分析模块依赖关系将共享模块提取到单独的包中 供我们自定义更加细粒度的分包策略 optimization: {splitChunks: {chunks: all, // all, async, and initialminChunks :10,// 当包大于1000byte就拆分maxSize: 1000,// 拆分的每个包不能小于500byteminSize: 500,cacheGroups:{utils: {test: /utils/,filename: [id]_utils.js}}},},多入口分包通过entry属性手动定义多个入口点Webpack 会为每个入口点生成一个独立的包。
Tree Shaking Tree Shaking 是移除代码中未引用部分的过程它利用了 ES2015 模块的静态结构特性。 原理
一是先「标记」出模块导出值中哪些没有被用过二是使用 Terser 删掉这些没被用到的导出代码
实现条件
使用 ES2015 模块确保项目使用import和export语法。配置sideEffects在package.json中添加 sideEffects: false字段告诉 Webpack 哪些文件是纯模块可以安全地进行 Tree Shaking。在配置中开始标记optimization.usedExports true, 将构建设置成生产模式 mode production
解决 treeShaking 无效方案
babel/preset-env 或 babel-preset-env 不要将 target 设置为 node第三方包中的 sideEffects: false
示例代码
我们安装 loadsh-es包来测试它比 lodash 包更好的 tree-shaking
yarn add lodash-es
yarn add terser-webpack-plugin -Dbutton clicklog防抖函数/buttonscriptimport { debounce } from lodash-es;export default {methods: {log: debounce(()console.log(log....), 500),}}
/script
更新配置文件 optimization: {minimize: true,minimizer: [new TerserPlugin()],usedExports: true,},
打包结果可以看到结果中只有loadsh-es包的 debunce函数 热更新HMR
热更新允许在开发过程中实时更新应用而无需刷新页面。
配置webpack-dev-server通过webpack-dev-server提供热更新服务。使用HotModuleReplacementPlugin在 Webpack 配置中添加此插件实现模块的热替换。
devServer{hottrue
}plugins: [new webpack.HotModuleReplacementPlugin()
]mounted() {if (module.hot) {module.hot.accept(./Hello.vue, () {});}},