Vue Cli3 + TypeScript 前后端分离开发详细指南

TypeScript 是趋势,也确实解决了我们开发以及调试前端的很多痛点,我觉得我们有必要上TS。TypeScript 是 JavaScript 的超集,也就是说JavaScript能干的他都能干,并且TS提供了很多语言扩展,提供了数据类型的 ts 让你在调试的时候不只是对着一堆 undefined 发愁了.

环境准备

  1. 安装node.js

  2. 安装webpack(可不安装)

    • npm install webpack --save-dev
  3. TypeScript环境安装

    • npm install -g typescript

    • 输出版本号检查安装是否成功 tsc -v

  4. vue Cli3安装

    • npm install -g @vue/cli

    • 输出版本号检查安装是否成功 vue --version

  5. IDE准备

Vue Cli3 搭建项目

  1. vue create fm-fronted-demo

  2. 选择自定义特色 - Manually select features,选择项如下:

屏幕快照 2019-05-23 下午2.46.12.png

各项含义:

(1) Babel - 用于转换ES6语法,适配低版本浏览器 - 需要

(2) TypeScript - 需要

(3) PWA Support - 渐进式应用 - 暂不需要

(4) Router - vue router路由 - 需要

(5) Vuex - vue状态管理,组件数据通信 - 需要

(6) CSS Pre-processors - CSS预处理(Less/Sass)- 不需要

(7) Linter/Formatter - 代码规范校验 - 需要

(8) Unit Testing - 单元测试 - 暂不需要

(9) E2E Testing - 端到端测试 - 暂不需要

  1. 配置功能细节,配置项如下:
屏幕快照 2019-05-23 下午2.49.40.png
  1. 运行项目:

在根目录执行 npm install安装需要的依赖包,再执行npm run serve启动项目,访问 http://localhost:8080 即可看到刚刚新建的项目。

简单入门

  1. 目录介绍

(1) node_modules - 项目所依赖的所有模块,相当于 Maven 导入的 jar 包文件

(2) public - 页面的入口,因为搭建的是基于vue-router的单页面应用,所以所有的组件都将渲染至 public 目录下的 index.html

(3) src - 源文件
assets - 静态资源文件
componets - 通用组件
views - 展示的页面

(4) App.vue 渲染至 index.html 的根组件,可以理解为根 DOM

(5) main.ts 全局配置信息,配置全局对象

(6) router.ts 路由配置信息

(7) shims-tsx.d.ts,shims-vue.d.ts - typescript的描述文件

(8) store.ts - vuex 状态管理配置文件

(9) babel.config.js - babel 配置文件

(10) package.json,package-lock.json - webpack 包管理配置文件

(11) tsconfig.json - ts配置文件

(12) tslint.json - 代码规范校验规则配置文件

  1. 写一个 .vue 文件

(1) 在 views 目录新建 Test.vue文件

屏幕快照 2019-05-23 下午3.20.51.png

(2) 写一个简单的数字遍历

屏幕快照 2019-05-23 下午6.24.50.png

(3) 配置路由router

屏幕快照 2019-05-23 下午6.02.07.png

(4) 访问 http://localhost:8080/#/test 即可看见效果

屏幕快照 2019-05-23 下午6.18.39.png

(5) 上手之后就可以看文档了,按需查看就可以

VUE官方文档:https://cn.vuejs.org/v2/guide/

TypeScript基础语法:https://www.runoob.com/typescript/ts-basic-syntax.html

常用插件及调试发布

  1. 引入 Axios

Axios 和 Ajax 功能类似,使用上都用于和服务端交互,不同的是 Axios 的实现基于 promise 的。

  • 安装:项目根目录执行 npm install axios

  • 配置封装:在 main.ts 中添加(可进一步封装get,post方法)

屏幕快照 2019-05-23 下午6.05.20.png
  • get 方式
this.$http.get("/user/info",{
    params:{
       userId:1
    }
}).then(data => {
   if (data) {
   //dosth
    } else {
     //dosth
   }
})
.catch(err => {
   //dosth
   });
  • post 方式
this.$http
  .post("/manage/users/configLevel", user)
  .then(data => {
      //dosth
 })
.catch(err => {
     //dosth
});
  1. 引入 iview

目前市面上用的比较广的,生态比较完整的PC端UI框架就是Element UI 和 iView,个人更喜欢 iView.

  1. 使用 vue-i18n 实现国际化
  • 安装:项目根目录执行 npm install vue-i18n
  1. 本地调试
  • 本地调试采用配置 nginx 代理的方式,前端代理 8080 端口,后端用特殊的 url 代理服务端请求,配置信息如下。
server {
listen       80;
server_name  127.0.0.1;
client_max_body_size 20m;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Max-Age' '86400' always;
location /rest {
   proxy_read_timeout 600s;
   proxy_pass http://127.0.0.1:9090;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_set_header Host $host;
}

location / {
   proxy_read_timeout 600s;
   proxy_pass http://127.0.0.1:8080;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_set_header Host $host;
   }
}
  1. 打包发布

打包发布分成两种,一种是单独部署,即前端和后端项目分开部署,另一种是在一起部署,即将 vue 项目打包后复制到 Web 项目里的 静态资源目录内。

(1) 配置打包路径,在根目录新建 文件 vue.config.ts

屏幕快照 2019-05-23 下午5.36.37.png

(2) 打包命令:npm run build

(3) 将生成的 dist 目录内的全部文件复制到 web 项目中即可

服务端开发指南

  1. Controller 全部用 @RestController修饰

  2. 前端 Post 传递的对象参数用 @RequestBody 接收

  3. 返回给前端的对象规范化,统一化,即 Controller 全部返回一种对象,对象参考格式如下:

import java.io.Serializable;

public class CommonObjectResponse implements Serializable {

    private boolean ok;
    private String message;
    private Object obj;

    public CommonObjectResponse(Object obj) {
        this.ok = true;
        this.message = "ok";
        this.obj = obj;
    }

    public CommonObjectResponse(boolean ok, String message, Object obj) {
        this.ok = ok;
        this.message = message;
        this.obj = obj;
    }

    public static CommonObjectResponse ok() {
        return new CommonObjectResponse(null);
    }

    public static CommonObjectResponse ok(Object obj) {
        return new CommonObjectResponse(obj);
    }

    public static CommonObjectResponse notOk(String message) {
        return new CommonObjectResponse(false, message, null);
    }

    public Object getObj() {
        return obj;
    }

    public void setObj(Object obj) {
        this.obj = obj;
    }

    public boolean isOk() {
        return ok;
    }

    public void setOk(boolean ok) {
        this.ok = ok;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

更多

更多内容请参考 Demo : 待上传

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271