kbnet.view.eap

一、准备

这篇文章本应该于2023年7月底发出来,在家里忙来忙去没顾得上,直到今天才有时间写这段文字。

原来web项目的开发是基于Vue2+Webpack+ElementUI技术栈,Vue官方也说了Vue2会支持到2023年12月31日,所以是时候升级技术了,于是就有了本篇文章内容Vue3+Vite+ElementPlus的升级过程。

废话不多说了,直接上项目源码:

Gitee:https://gitee.com/kinbor/vue3_vite_kbnet.eap

Github:https://github.com/kinbor/Vue3_Vite_kbnet.eap

特别提示:由于gitee和github上README.md文件内容排版不好,建议将项目或README.md文件下载下来看,或者直接看下面的内容。

 

原本想弄个效果看看,只是打包后不包含mock,所以进入不到系统内部了,还是自己下载源码运行看效果吧(登录ID和密码随意),同时提供残废的预览版地址:http://101.132.16.88 

 

二、README.md

  1 一、项目信息
  2     1.项目名称:KBNET.EAP表示KBNET开发平台下的EAP项目,EAP即英文Enterprise Application Platform。
  3     2.项目说明:本项目只是一个简单的开发框架,目的是为了将基于Vue3的开发技术集成到一起,然后相互搭配和调度,为实际业务功能开发打下坚实的基础。
  4     3.更多信息:本项目以PC机上的浏览器为基准设计开发,倘若使用智能设备(如手机等)访问系统,体验感可能会降低,甚至于某些功能无法使用。
  5 
  6 二、开发环境
  7     1.本项目是在VSCode工具下设计编程,是以Vue3+Vite2为基础,因此,在编译运行项目时,确保安装相应的编程工具。
  8     2.如果您想阅读项目源码,或者基于此项目模型开发新项目,请首先确认对Vue技术栈的掌握能力,以及谨慎阅读并审核过项目源码,确保项目源码的安全性等事项。
  9     3.由于Vue的开发依赖Nodejs工具,所以您还需要在您的计算机上下载并安装Nodejs。
 10     4.下载本项目源码,且安装了开发环境相应的工具,就可以安装依赖的软件包
 11         npm install
 12     5.运行模式,通过运行npm run命令,系统提示Vite提供了三种命令:dev命令用于开发调试,build用于正式发布,preview用于打包预览(看一下实际效果)。
 13         npm run dev
 14         npm run build
 15         npm run preview
 16     6.安装VSCode工具Vue开发相关插件,这些插件有利于快速编码、以及代码检验。
 17         ESLint
 18         Prettier - Code formatter
 19         Html CSS Support
 20         JavaScript(ES6)code snippets
 21         Live Server
 22         Vue3 Snippets
 23         Vue Language Features
 24         Vue VSCode Snippets
 25         ...
 26         一般情况,大家还会安装以下插件
 27         JQuery Code Snippets
 28         Bootstrap4,Font awesome4 Snippets
 29         Bootstrap5,Font awesome5 Snippets
 30         React/Redux/React-Native snippets
 31         Go
 32         C#
 33         ...
 34     7.代码格式化,没患强迫症的码农不算合格的程序员,多一个空格或空行都会感觉难受,为了统一代码格式,需要使用ESLint+Prettier进行约束和格式化
 35         npx prettier --write . #.表示所有文件
 36     8.浏览器支持度,具体支持那种类型或哪个版本的浏览器,是由Vue框架决定,Vue3已不再支持IE浏览器,支持的主浏览器包含:
 37         Edge>=88 | Firefox>=78 | Chrome>=87 | Safari>=14
 38 
 39 三、工具插件
 40     1.npm常用命令
 41         1.1.安装模块:npm install xxxx@version 或 npm install xxxx@lastest
 42         1.2.卸载模块:npm uninstall xxxx
 43         1.3.更新模块:npm update
 44         1.4.检查模块是否已经过时:npm outdated
 45         1.5.查看安装的模块:npm ls
 46         1.6.查看包的安装路径:npm root
 47         1.7.强制清理模块缓存:npm cache clean --force
 48         1.8.查看模块版本:npm version
 49     2.初始化项目:npm init vite,然后按照提示输入正确的内容。
 50     3.vue-router
 51     3.1.安装指令:npm install vue-router@latest--save
 52     3.2.在src目录下创建router文件夹,在文件夹下创建index.js文件
 53     3.3.编写index.js内容
 54     3.4.修改main.js文件,引入vue-router
 55             import \* as Vue from 'vue'
 56             import App from './App.vue'
 57             import router from './router/index'
 58 
 59             const app=Vue.createApp(App)
 60             app.use(router)
 61             app.mount('#app')
 62     4.vuex
 63         4.1.安装指令:npm install vuex@latest --save
 64         4.2.在src下创建目录store文件夹,然后在其下创建index.js文件
 65         4.3.编写index.js内容
 66         4.4.修改main.js文件,引入vuex
 67             import * as Vue from 'vue'
 68             import App from './App.vue'
 69             import store from './store/index'
 70 
 71             const app=Vue.createApp(App)
 72             app.use(store)
 73             app.mount('#app')
 74     5.elementplus
 75         5.1.安装指令:npm install element-plus --save
 76         5.2.修改main.js文件,引入elementplus
 77             import * as Vue from 'vue'
 78             import App from './App.vue'
 79             import ElementPlus from 'element-plus'
 80             import 'element-plus/theme-chalk/index.css'
 81             import zhCn from 'element-plus/es/locale/lang/zh-cn'
 82 
 83             const app=Vue.createApp(App)
 84             app.use(ElementPlus,{locale:zhCn})
 85             app.mount('#app')
 86         5.3.Icon图标
 87             a.安装指令:npm install @element-plus/icons-vue
 88             b.注册图标,在main.js文件中
 89                 import * as ElementPlusIconsVue from '@element-plus/icons-vue'
 90                 const app = createApp(App)
 91                 for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
 92                     app.component(key, component)
 93                 }
 94     6.axios
 95         6.1.安装指令:npm install axios
 96         6.2.配置跨域请求事项,修改vite.config.js文件
 97             import {defineConfig} from 'vite'
 98             import vue from '@vitejs/plugin-vue'
 99             import path from 'path'   // 需安装此模块
100             import cfgSetting from './src/configs/settings'
101             export default defineConfig({
102                 plugins: [
103                     vue()
104                 ],
105                 resolve: {
106                     alias: {
107                         '@': path.resolve(__dirname, 'src')
108                     }
109                 },
110                 server: {
111                     host: cfgSetting.spaAddress,
112                     port: cfgSetting.spaPort,
113                     strictPort: false,              //设为true时端口被占用则直接退出,不会尝试下一个可用端口
114                     cors: true,                     //为开发服务器配置CORS, 默认启用并允许任何源
115                     open: true,                     //服务启动时自动在浏览器中打开应用
116                     hmr: false,                     //禁用或配置 HMR 连接
117                     //传递给 chockidar 的文件系统监视器选项
118                     watch: {
119                         ignored:["!**/node_modules/your-package-name/**"]
120                     },
121                     proxy: {
122                         [cfgSetting.apiType]: {
123                                 target: cfgSetting.svcAddress,   //实际请求地址
124                                 changeOrigin: true,
125                                 ws: true,
126                                 rewrite: (path) => path.replace(cfgSetting.apiType, '')
127                         }
128                     },
129                     https: cfgSetting.svcIsHttps
130                 }
131             })
132     7.i18n
133         7.1.安装指令:npm install vue-i18n
134         7.2.在src目录下创建locales目录,并添加index.js,zh_cn.js,en_us.js三个文件
135         7.3.编辑index.js文件
136                 import { createI18n } from 'vue-i18n' //引入vue-i18n组件
137                 import zh_cn from './zh_cn'  //中文语言包
138                 import en_us from './en_us'  //英文语言包
139                 // 实例化I18n
140                 const i18n = createI18n({
141                     legacy: false,
142                     globalInjection: true,
143                     locale: "zh_cn", // 初始化配置语言
144                     messages: {
145                         zh_cn,
146                         en_us
147                     }
148                 })
149                 export default i18n
150         7.4.编辑zh_cn.js文件
151                 export default {
152                     message: {
153                         Home: '首页',
154                         About: '关于'
155                     }
156                 }
157         7.5.编辑en_us.js文件
158                 export default {
159                     message: {
160                         Home: 'Home',
161                         About: 'About'
162                     }
163                 }
164         7.6.修改main.js文件,引入vue-i18n
165                 import * as Vue from 'vue'
166                 import App from './App.vue'
167                 import i18n from './locales/index'
168 
169                 const app=Vue.createApp(App)
170                 app.use(i18n)
171                 app.mount('#app')
172         7.7.测试效果,修改App.vue文件
173                 <template>
174                     <img alt="Vue logo" src="@/assets/logo.png" />
175                     <a href="javascript:void(0)" @click="change('zh_cn')">中文</a> --
176                     <a href="javascript:void(0)" @click="change('en_us')">English</a>
177                     <div>{{$t("message.Home")}}---{{$t("message.About")}}</div>
178                     <router-view />
179                 </template>
180                 <script>
181                     import { useI18n } from 'vue-i18n'
182                     export default ({
183                         name: "App",
184                         setup() {
185                             const { locale } = useI18n()
186                             function change(type) {
187                                 locale.value = type;
188                             }
189                             return {
190                                 change
191                             }
192                         }
193                     })
194                 </script>
195     8.mock
196         8.1.安装指令
197             a.安装mockjs:npm install mockjs --save-dev
198             b.安装vite-plugin-mock:npm i vite-plugin-mock cross-env -D
199         8.2.在 package.json 中设置环境变量
200             将"dev": "vite"改为“"dev": "cross-env NODE_ENV=development vite"”
201         8.3.在 vite.config.js 中添加 mockjs 插件
202             import { defineConfig } from "vite"
203             import vue from "@vitejs/plugin-vue"
204             import { viteMockServe } from "vite-plugin-mock"
205 
206             export default defineConfig({
207                 plugins: [
208                     vue(),
209                     viteMockServe({
210                         supportTs: false     //如果使用typescript开发,则需要配置supportTs为true
211                     })
212                 ]
213             })
214         8.4.在根目录创建 mock 文件夹,建立getData.js在其中创建需要的数据接口
215             export default [
216                 {
217                     url: "/api/getUsers",
218                     method: "get",
219                     response: () => {
220                         return {
221                             code: 0,
222                             message: "ok",
223                             data: ["张三", "李四"],
224                         }
225                     }
226                 }
227             ]
228     9.sass
229         9.1.安装指令:npm i sass -D
230         9.2.使用sass,语法:<style lang="scss"></style>
231     10.gzip
232         10.1.安装指令:npm i vite-plugin-compression -D
233         10.2.修改vite.config.js文件,引入插件
234             import { defineConfig } from 'vite'
235             import vue from '@vitejs/plugin-vue'
236             import viteCompression from 'vite-plugin-compression'
237             import path from 'path'
238             export default defineConfig({
239                 plugins: [
240                     vue(),
241                     viteCompression({
242                         threshold: 10240,      //体积大于10kb压缩
243                         filter: /\.(js|mjs|json|css|html)$/i,
244                         algorithm: 'gzip',          //压缩算法,gzip|brotliCompress|deflate|deflateRaw
245                         disable: false,
246                         deleteOriginFile: false   //是否删除源文件
247                     })
248                 ],
249                 resolve: {
250                     alias: {
251                         '@': path.resolve(__dirname, 'src')
252                     }
253                 }
254             })
255     11.copy
256         11.1.安装指令:npm install rollup-plugin-copy -D
257         11.2.修改vite.config.js文件,引入插件
258             import { defineConfig } from 'vite'
259             import vue from '@vitejs/plugin-vue'
260             import copy from 'rollup-plugin-copy'
261             import path from 'path'
262             export default defineConfig({
263                 plugins: [
264                     vue(),
265                     copy({
266                         targets: [
267                             { src: 'src/static', dest: 'dist' }, //执行拷贝
268                         ],
269                         hook: 'writeBundle' // notice here
270                     })
271                 ],
272                 resolve: {
273                     alias: {
274                         '@': path.resolve(__dirname, 'src')
275                     }
276                 }
277             })
278     12.eslint+prettier
279         12.1.eslint
280             12.1.1.安装指令:npm i eslint -D
281             12.1.2.配置eslint:执行npx eslint --init命令,然后按照提示完成一系列操作来创建配置文件
282             12.1.3.修改.eslintrc.cjs文件,编写配置信息
283             12.1.4.在VSCode使用ESlint,需要安装插件:ESLint
284             12.1.5.使用eslint格式化代码
285                     a.在package.json的scripts属性里配置 格式化 命令
286                         "scripts": {
287                             "lint": "eslint --fix --ext .js,.vue src"
288                         }
289                     b.终端执行命令
290                         npm run lint
291         12.2.prettier
292             12.2.1.安装指令:npm i prettier -D
293             12.2.2.配置prettier
294                     {
295                         "useTabs": false, //使用tab缩进,默认false
296                         "tabWidth": 2, //tab缩进大小,默认为2空格数
297                         "printWidth": 100, //换行长度,默认80
298                         "singleQuote": true, //使用单引号代替双引号
299                         "trailingComma": "none", //是否在多行逗号分隔语法中,在最后一个元素后面加逗号
300                         "bracketSpacing": true, //在对象,数组括号与文字之间加空格 "{ foo: bar }"
301                         "semi": false, //每行末尾自动添加分号
302                         "endOfLine": "auto" //换行符类型
303                     }
304             12.2.3.VSCode编辑器,安装Prettier插件:Prettier - Code formatter
305             12.2.4.使用其命令格式化代码文件
306                     #格式化所有文件(. 表示所有文件)
307                     npx prettier --write .
308         12.3.兼容问题
309             12.3.1.解决eslint和prettier冲突
310                     a.安装插件:npm i eslint-plugin-prettier eslint-config-prettier -D
311                     b.修改.eslintrc.js配置文件,添加prettier插件
312                             module.exports = {
313                                 extends: [
314                                     'plugin:vue/essential',
315                                     'airbnb-base',
316                                     'plugin:prettier/recommended' // 添加 prettier 插件
317                                 ],
318                             }
319     13.postcss
320         13.1.安装指令:npm install postcss postcss-preset-env -D
321         13.2.配置vite.config.js文件
322                 import { defineConfig } from 'vite'
323                 import vue from '@vitejs/plugin-vue'
324                 import postcssPresetEnv from 'postcss-preset-env'
325 
326                 export default defineConfig({
327                     base: './',
328                     publicDir: 'public', // 静态资源服务的文件夹
329                     logLevel: 'info', // 控制台输出的级别 info 、warn、error、silent
330                     clearScreen: true, // 设为false 可以避免 vite 清屏而错过在终端中打印某些关键信息
331                     css: {
332                         postcss: {
333                             plugins: [postcssPresetEnv]
334                         }
335                     }
336                 })
337     14.svgIcon
338         14.1.创建目录和文件结构
339                 目录:./src/styles
340                 目录:./src/styles/svg
341                 目录:./src/styles/svg/svgs
342                 文件:./src/styles/svg/index.vue
343                 文件:./src/styles/svg/svgBuilder.js
344         14.2.安装svg插件
345                 指令:npm install svg-sprite-loader -D
346         14.3.编写./src/styles/svg/index.vue文件
347         14.4.编写./src/styles/svg/svgBuilder.js文件,需要安装fs模块:npm install fs
348         14.5.编辑main.js文件,引入./src/styles/svg/index.vue文件
349                 import * as Vue from 'vue'
350                 import SvgIcon from './icons/index.vue'
351                 import App from './App.vue'
352 
353                 const app = Vue.createApp(App)
354                 app.component('svg-icon', SvgIcon)
355                 app.mount('#app')
356         14.6.配置vite.config.js文件,使svgBuilder.js文件功能启用
357                 import { defineConfig } from 'vite'
358                 import vue from '@vitejs/plugin-vue'
359                 import { svgBuilder } from './src/styles/svg/svgBuilder'
360 
361                 export default defineConfig({
362                     base: './',
363                     plugins: [
364                         vue(),
365                         svgBuilder('./src/styles/svg/svgs/') // 这里已经将src/styles/svg/svgs/下的svg全部导入
366                     ]
367                 })
368         14.7.使用效果
369                 <svg-icon icon-class="login-user" />
370 371                 <svg-icon :icon-class="passwordType === 'password' ? 'password-eye' : 'password-eye-open'" />
372     15.nprogress
373         15.1.安装指令:npm install nprogress -S
374         15.2.在/src/utils文件夹下,创建nprogress.js文件,编写内容。
375     16.js-cookie
376         16.1.安装指令:npm install js-cookie
377         16.2.使用方式:
378             import Cookies from "js-cookie"
379             // 写入cookie
380             Cookies.set('name', 'value') // 创建简单的cookie
381             Cookies.set('key', 'value', { expires: 10 }) // 通常会以当前时间+多少毫秒,如const newDate=new Date(new Date().getTime() + 20 * 60 * 1000)
382             Cookies.set('key', 'value', { path: '', domain: '' }) //可以通过配置path等
383             Cookies.set('key', 'value', { expires: 10, path: '', domain: '' })
384             // 读取
385             Cookies.get('name')
386             // 删除某项cookie值
387             Cookies.remove('name') // 删除普通的cookie
388             Cookies.remove('name', { path: '' }) // 删除存了指定页面path的cookie
389 
390     17.echarts
391         17.1.安装指令:npm install echarts vue-echarts
392         17.2.使用方式:用 npm 与 Vue Loader 基于 ES Module 引入(按需引用)
393             import ECharts from 'vue-echarts'
394             //手动引入 ECharts 各模块来减小打包体积
395             import 'echarts/lib/chart/bar'
396             import 'echarts/lib/component/tooltip'
397             // 注册组件后即可使用
398             import Vue from 'vue'
399             Vue.component('v-chart', ECharts)
400 401             export default {
402                 components: {
403                     'v-chart': ECharts
404                 }
405             }
406 
407 四、配置规则
408     1.部署配置
409         1.1.IIS服务器
410             a.在生产环境或开发测试环境,如若以IIS作为宿主程序,那么一定要在站点的根目录创建一个名称为web.config的配置文件,且内容为下述信息。
411             b.因为此项目是单页面程序,如果在浏览器地址栏手动输入非首页地址(http://www.xxxx.com/xxxx/xxxxxx)或者刷新非首页地址页面请求会直接发往服务器,而服务器找不到目标文件会报404或500错误(特别是history路由模式下)。
412             c.配置信息
413                 <?xml version="1.0" encoding="UTF-8"?>
414                 <configuration>
415                     <system.webServer>
416                         <rewrite>
417                             <rules>
418                                 <rule name="Handle History Mode and custom 404/500" stopProcessing="true">
419                                     <match url="(.*)" />
420                                     <conditions logicalGrouping="MatchAll">
421                                         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
422                                         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
423                                     </conditions>
424                                     <action type="Rewrite" url="/" />
425                                 </rule>
426                             </rules>
427                         </rewrite>
428                     </system.webServer>
429                 </configuration>
430             d.安装UrlWrite模块,这一步是关键,否则上述配置无效。
431         1.2.nginx服务器
432             a.配置信息
433                 location / {
434                     try_files $uri $uri/ /index.html;
435                 }
436     2.Http2Https
437         2.1.IIS服务器:在http网站下的web.config下添加如下规则。
438             <?xml version="1.0" encoding="UTF-8"?>
439             <configuration>
440             <system.webServer>
441                 <rewrite>
442                 <rules>
443                     <rule name="HTTP2HTTPS" stopProcessing="true">
444                     <match url="(.*)" />
445                     <conditions>
446                         <add input="{HTTPS}" pattern="off" ignoreCase="true" />
447                     </conditions>
448                     <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
449                     </rule>
450                 </rules>
451                 </rewrite>
452             </system.webServer>
453             </configuration>
454         2.2.nginx服务器:使用rewrite 将请求过来的 http URL直接重写成 https
455             server {
456                 listen 80;
457                 #填写绑定证书的域名
458                 server_name www.xxx.com;
459                 #强制将http的URL重写成https
460                 rewrite ^(.*) https://$server_name$1 permanent;
461             }
462     3.令牌验证码解释
463         50000:不支持的授权方式
464         50001:授权信息验证无效
465         50002:没有权限请求目标资源
466         50005:授权信息已失效
467         50006:权限验证失败(即请求者没有权限)
468         50010:授权信息已失效
469         50011:请求来源与授权不符
470         50012:令牌已失效
471         50013:权限验证失败(即请求者没有权限)
472         50020:错误的加密数据
473         50021:无效的加密数据
474         50023:数据解密异常
475         50025:无法完成数据加密
476         50026:无法获取密钥信息
477         50027:数据加密异常
478         50030:请求无效,未知的程序类型
479     4.
480 
481 五、疑难杂症
482     1.无法安装软件包,总是失败的解决办法
483         1.1.删除node_modules文件夹,重新安装
484         1.2.强制清除缓存npm cache clean -force
485         1.3.以管理员权限执行安装命令
486     2.依赖包升级问题
487         2.1.browserslist和caniuse-lite升级问题
488             a.编译警告:Browserslist: caniuse-lite is outdated. Please run next command `npm update`
489             b.解决办法:
490                 1.删除node_modules目录下的caniuse-lite和browserslist两个文件夹
491                 2.npm i caniuse-lite browserslist,注意package.json文件中的dependencies对象会增加依赖关系,删了即可
492     3.node-sass兼容性问题
493         3.1.npm update后会造成node-sass和nodejs不兼容问题
494             a.编译错误:Cannot find module 'node-sass'
495             b.解决方法:
496                 1.安装较新的Node.js
497                 2.然后安装node-sass,命令:cnpm install node-sass@latest,或者安装指定版本(如:cnpm install node-sass@4.14.1)
498     4.sass-loader版本太低警告
499         a.编译警告:WARN A new version of sass-loader is available. Please upgrade for best experience.
500         b.解决方法:
501             1.先执行卸载命令->npm uninstall sass-loader
502             2.执行安装命令->npm install -D sass-loader@8.x
503         c.重要提示:不宜安装太高的版本,可能不兼容
504     5.安装cnpm错误
505         a.错误信息:
506             cnpm : 无法加载文件xxxxxxxxxxxxxx\npm\cnpm.ps1。未对文件 xxxxxxxxxxxxxx\npm\cnpm.ps1 进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
507         b.解决方案:
508             1.首先此问题是权限原因导致。
509             2.第一种方法:将VSCode工具设置为“以管理员方式运行”模式
510             3.第二种方法:以管理员方式运行PowerShell工具,然后执行指令“set-ExecutionPolicy RemoteSigned”,在给出的选项中,选择“A”即可。
511     6.安装Terser
512         a.由于build模式的minify设置为terser,所以需要安装terser
513         b.安装指令:npm install terser
514     7.在vue页面中使用path报错
515         a.错误信息:
516             Module "path" has been externalized for browser compatibility. Cannot access "path.resolve" in client code.
517         b.解决方案:
518             1.安装依赖包:npm install path-browserify
519             2.把“import path from 'path'”改为“import path from 'path-browserify'”
520            
521 
522 六、Vue知识
523     1.生命周期
524     1.1.选项式(Options)
525         a.beforeCreate():在实例加载之前,尚未设置计算属性、观察者、事件、数据属性和操作等内容。
526         b.created():实例已经初始化,激活了计算属性、观察者、事件、数据属性和随之而来的操作。
527         c.beforeMount():在DOM上挂载实例之前的那一刻,模板和作用域样式都在这里编译,但是你仍然无法操作DOM、元素属性仍然不可用。
528         d.mounted():现在可以进行数据适合模板、DOM元素替换为数据填充元素之类的操作了,元素属性现在也可以使用了。
529         e.beforeUpdate():在这里对需要更新DOM的数据进行更改。
530         f.updated():在对DOM更新之后立即调用。
531         g.beforeDestroy():在 Vue实例被销毁之前,实例和所有函数仍然完好无损并在此处工作。
532         h.destroyed():Vue实例都已被销毁,事件监听器和所有指令之类的东西在此阶段已被解除绑定。
533     1.2.组合式(Composition)
534         a.setup():在组建创建时执行。可以简单理解为替代了选项式中的beforeCreate和created。
535         b.onBeforeMount():在挂载之前被调用,渲染函数render首次被调用。
536         c.onMounted():组件挂载时调用。
537         d.onBeforeUpdate():数据更新时调用,发生在虚拟DOM打补丁之前。
538         e.onUpdated():因数据更改导致的虚拟DOM重新渲染和打补丁时调用。
539         f.onBeforeUnmount():在卸载组件实例之前调用,此阶段的实例依旧是正常的。
540         g.onUnmounted():卸载组件实例后调用,组件实例的所有指令都被解除绑定,所有事件侦听器都被移除,所有子组件实例被卸载。
541    
542 
543 七、VSCode常用快捷键
544     1.注释与取消注释:Ctrl+/
545     2.代码缩进:Ctrl+[ 或 Ctrl+]
546     3.调用调试终端:Ctrl+、
547     4.选择单词:Ctrl+D
548     5.列选择快捷键
549         a.windows:alt+shift+鼠标左键拖动
550         b.mac:shift+option+鼠标左键拖动
551 
552 八、总结
553     1.上述规则规范属于标准编码规范,如遇特殊业务场景,可自行设计规则规范。
554     2.源自“取自网络,还于网络”的理念,已此项目源码开放,但声明于先:请正确使用项目源码,如发生任何纠纷和违法行为,均于本人无关。

 

三、总结

荡迹编程技术十余年,涉猎web\gui\mobile,云服务(云计算),分布式(计算和存储)、网络安全等技术,而今回首觉的自己有能力输出更多的实用技术,如同这篇文章所述的程序框架,因为这些技术都玩过了,主要需要花费时间和精力整理聚合在一起,所以也谈不上技术难度。好吧,就算是给自己定下一个目标,尽可能输出更多的实用技术,如智能网关、智能服务、智能存储等等。

 

软件编程技术本就是“取自网络,还于网络”,因此,如果本项目能够帮助到您或您的单位,本人表示很开心。

 

 

posted @ 2023-08-14 02:40  oO归客Oo  阅读(45)  评论(0编辑  收藏  举报