码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 你把 vite打包 玩明白


    前言:webpack 打包看这里

    (移动端打包)一步一步,一步 从代码到,打包成为手机App,上传至nginx服务器 (Vue项目)_0.活在风浪里的博客-CSDN博客_移动端打包成app一步一步,一步 从代码到,打包成为手机App,上传至ngnix服务器 (Vue项目)https://blog.csdn.net/m0_57904695/article/details/122500485?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165940900116782184626956%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165940900116782184626956&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-122500485-null-null.nonecase&utm_term=%E6%89%93%E5%8C%85&spm=1018.2226.3001.4450手写一个服务器代码将 《vue电商后台管理系统》部署上去 上线、打包_0.活在风浪里的博客-CSDN博客亲测可用,一定会收获颇多,1.上线vue电商后台管理项目2.手写搭建服务器并挂载 (node)3.打包优化 完成上线https://blog.csdn.net/m0_57904695/article/details/122977868?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165940900116782184626956%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165940900116782184626956&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-122977868-null-null.nonecase&utm_term=%E6%89%93%E5%8C%85&spm=1018.2226.3001.4450

    目录

    一:vite构建项目 配置base

     二:路径别名

    三:生产环境移除log + 跨域 

    四:引入element-plus组件库 cdn

    安装命令

     引入到vite.config.ts

     使用在插件中

    下载element-plus

    五:代码压缩

    六:图片压


     哎,真慢,你知道我在说啥,开发中启动一下项目抽根烟回来就启动开了,常规操作基操勿六

    目前尤大大强烈推荐的vite,如何?一个字,真的好快!念及此,解释打包配置,不在说官方文字

    此博文将以一种几近聊天的方式来学会打包,第一次打包的小伙伴也可以一遍懂一遍成,不多说,开始了

    一:vite构建项目 配置base

     

     

     

     

     

     

    好了,在以上你构建了vite,并配置了最简单的操作后,你准备配置vite.confing.ts 

     开发环境下我们的图片位置在/src,ok,本地没问题正常显示,你打了个包 (npm run build),然后又运行了npm脚本preview,

    也没问题,但是在一些服务器上,使用绝对目录会导致404,所以我们需要配置为相对目录 

     

     

     二:路径别名

    •  先引入path,在配置, 注意一定不要随意命名,a b c这样的,项目的目录也不能为关键字保留字!!

     

    1. import { resolve } from "path";
    2. resolve: {
    3. alias: {
    4. "@": resolve(__dirname, "src"),
    5. // 注意一定不要随意命名,a b c这样的,项目的目录也不能为关键字保留字!!
    6. "comp": resolve(__dirname, "src/components"),
    7. // 配置图片要这样引用
    8. "/img": "./src/assets",
    9. },
    10. },

    三:生产环境移除log + 跨域 

    1. build: {
    2. minify: "terser",
    3. terserOptions: {
    4. compress: {
    5. //生产环境时移除console
    6. drop_console: true,
    7. drop_debugger: true,
    8. },
    9. },
    10. },

    vite.config.ts 完整代码:

    1. import { defineConfig } from "vite";
    2. import AutoImport from "unplugin-auto-import/vite";
    3. import Components from "unplugin-vue-components/vite";
    4. import vue from "@vitejs/plugin-vue";
    5. import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
    6. import path from "path";
    7. export default defineConfig({
    8. plugins: [
    9. vue(), //vue
    10. AutoImport({
    11. //引入vue 插件
    12. imports: ["vue"],
    13. dts: "src/auto-import.d.ts",
    14. }),
    15. AutoImport({
    16. //plus按需引入
    17. resolvers: [ElementPlusResolver()],
    18. }),
    19. Components({
    20. //plus按需引入
    21. resolvers: [ElementPlusResolver()],
    22. }),
    23. ],
    24. build: {
    25. minify: "terser",
    26. terserOptions: {
    27. compress: {
    28. //生产环境时移除console
    29. drop_console: true,
    30. drop_debugger: true,
    31. },
    32. },
    33. },
    34. resolve: {
    35. //配置根路径别名: import('@/pages/login/login.vue')
    36. alias: {
    37. "@": path.resolve(__dirname, "src"),
    38. },
    39. },
    40. // 跨域
    41. server: {
    42. //使用IP能访问
    43. host: "0.0.0.0",
    44. // 热更新
    45. hmr: true,
    46. //设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口
    47. strictPort: false,
    48. //服务器启动时自动在浏览器中打开应用程序,当此值为字符串时,会被用作 URL 的路径名
    49. open: "http://localhost:3000",
    50. //自定义代理规则
    51. proxy: {
    52. // 选项写法
    53. "/api": {
    54. target: "https://admin.itrustnow.com",
    55. changeOrigin: true,
    56. rewrite: (path) => path.replace(/^\/api/, ""),
    57. },
    58. },
    59. },
    60. });

    四:引入element-plus组件库 cdn

    官网建议使用按需引入,但是它在解析使用到的组件时也很慢,所以建议使用cdn

    安装命令

    cnpm i vite-plugin-cdn-import --save-dev

     引入到vite.config.ts

    import importToCDN, { autoComplete } from "vite-plugin-cdn-import";
    

    使用在插件中

    1. plugins: [
    2. vue(), //vue
    3. AutoImport({
    4. //自动引入vue组件 插件
    5. imports: ["vue"],
    6. dts: "src/auto-import.d.ts",
    7. }),
    8. //plus按需引入
    9. // AutoImport({
    10. // resolvers: [ElementPlusResolver()],
    11. // }),
    12. // Components({
    13. // resolvers: [ElementPlusResolver()],
    14. // }),
    15. importToCDN({
    16. modules: [
    17. {
    18. name: "vue",
    19. var: "Vue",
    20. path: "https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.31/vue.global.prod.min.js",
    21. },
    22. {
    23. name: "vuex",
    24. var: "Vuex",
    25. path: "https://cdnjs.cloudflare.com/ajax/libs/vuex/4.0.2/vuex.global.prod.min.js",
    26. },
    27. {
    28. name: "vue-router",
    29. var: "VueRouter",
    30. path: "https://cdnjs.cloudflare.com/ajax/libs/vue-router/4.0.12/vue-router.global.prod.min.js",
    31. },
    32. {
    33. // 引入cdn element-plus
    34. name: "element-plus",
    35. var: "ElementPlus",
    36. path: "https://unpkg.com/element-plus",
    37. css: "https://unpkg.com/element-plus/dist/index.css",
    38. },
    39. ],
    40. }),
    41. ],

    下载element-plus

    • vite-plugin-cdn-import这个插件是专门打包发布阶段使用的,开发阶段并没有什么用,所以开发阶段我们该怎么引入npm包就怎么引入,该在项目中怎么使用vuex、vue-router就怎么使用就好了
    • 需要注意的是,开发环境使用本地的npm包,cdn是打包时候才生效的。

     一种简单的方法,就是你全局引入,注释掉plus 的css文件,因为cdn已经引入了,npm run build然后再去看dist/index.html,里面已经引入了cdn链接,并且vue、vuex、vue-router、plus这些库没有被打包进你的本地包中。

    yarn add element-plus
    1. // main.ts
    2. import { createApp } from 'vue'
    3. import ElementPlus from 'element-plus'
    4. //import 'element-plus/dist/index.css'
    5. import App from './App.vue'
    6. const app = createApp(App)
    7. app.use(ElementPlus)
    8. app.mount('#app')

    五:代码压缩

    安装

    cnpm i vite-plugin-compression -D

    引入 

    import viteCompression from "vite-plugin-compression";

     使用

    1. plugins: [
    2. viteCompression(),
    3. ],

     nginx服务端需要配置

    没错,这里nginx 也要配置, 配置启动gzip模块, 然后优先使用本地压缩好的文件。 

    前端配置gzip压缩 

    为啥要客户端生成呢? 问得好, 我们知道服务端生成是不是每一次请求都要去请求服务器,然后服务器来生成压缩包。服务器每一次生成压缩包是不是会不会浪费服务端的性能哇!, 如果客户端生成,服务端先判断是否存在的后缀名为zip的文件,直接去拿,不存在在来压缩,这样是不是把服务器每一次都要压缩的事情,交给客户端了呢? 虽然客户端打包进行代码压缩会很慢。 但是我们打包只是发布代码的时候打一次包,而服务器是要面对成千上万的人来访问等。 说到这里大家应该明白了吧。
     

    六:图片压

    1. cnpm i -d vite-plugin-imagemin
    2. import viteImagemin from 'vite-plugin-imagemin'
    3. plugins[
    4. viteImagemin({
    5. gifsicle: {
    6. optimizationLevel: 7,
    7. interlaced: false,
    8. },
    9. optipng: {
    10. optimizationLevel: 7,
    11. },
    12. webp: {
    13. quality: 75,
    14. },
    15. mozjpeg: {
    16. quality: 65,
    17. },
    18. pngquant: {
    19. quality: [0.65, 0.9],
    20. speed: 4,
    21. },
    22. svgo: {
    23. plugins: [
    24. {
    25. removeViewBox: false,
    26. },
    27. {
    28. removeEmptyAttrs: false,
    29. },
    30. ],
    31. },
    32. })
    33. ]

  • 相关阅读:
    1336. 每次访问的交易次数
    【分享】围绕 API 团队协作与自动化测试的实践!
    精简docker的导出镜像
    肖sir__设计测试用例方法之因果图07_(黑盒测试)
    ADB日常使用命令
    fastjson首字母大写的几种方法
    计算机网络第2章-DNS(3)
    【C语言】可变参数列表详解
    树莓 LUMA-OLED.EXAMPLE使用
    网络编程 10.26
  • 原文地址:https://blog.csdn.net/m0_57904695/article/details/126118104
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号