Not all those who wander are lost.
彷徨者并非都迷失方向。
@
目录
当你看到这篇文章的时候,暂且认为你对如何做一个网站有了兴趣.
本系列文章将从一个完整的项目是如何开发的过程进行编写,期间会涉及前端、后端和一些运维的知识。
本篇题为 全栈的自我修养 将通过一个项目整合( 一前端项目对应三个后端项目 ),完成一个简单的DEMO
其中前端项目使用 Vue.js ,这个项目将会用到 vue , vuex , vue-route , axios , elementUI 等
后端项目使用为 3 个项目,其中涉及 Spring Boot, Mybaits, Flask 等
中间会穿插一些运维的知识如 常用linux命令, Jenkins 等
也会介绍一些工具的使用
作为第一篇,这里主要介绍 Vue 环境的准备工作.
根据实际情况下载对应版本即可
官网地址: https://nodejs.org/zh-cn/download/
安装完成后,在控制台中输入: node -v 即可得知安装的 node 版本,使用 npm -v 查看 npm 版本
node -v v14.4.0 npm -v 6.14.5
如果上面已经验证正确安装了 node 和 npm , 则使用 npm install -g vue-cli 完成 vue-cli 的安装
给项目起名字一直是困扰我的第一个难题,本次将项目暂命名为 epimetheus-frontend
使用 vue-cli 命令生成项目,命令格式为: vue init webpack Vue-Project , 这里为 vue init webpack epimetheus-frontend ,
epimetheus epimetheus vue init webpack epimetheus-frontend
根据提示填写项目信息:
? Project name epimetheus-frontend ? Project description A Vue.js project ? Author yunan.zhang <zhangyunan@91jinrong.com> ? Vue build standalone ? Install vue-router? Yes ? Use ESLint to lint your code? Yes ? Pick an ESLint preset Standard ? Set up unit tests Yes ? Pick a test runner jest ? Setup e2e tests with Nightwatch? Yes ? Should we run `npm install` for you after the project has been created? (recommended) yarn
注意上面选择了 yarn 而不是 npm , 这里对于使用 npm 还是 yarn, 并没有要求,两个的功能都能使用,只是命令略有不同而已
| npm | yarn |
|---|---|
| npm install | yarn install |
| (N/A) | yarn install --flat |
| (N/A) | yarn install --har |
| (N/A) | yarn install --no-lockfile |
| (N/A) | yarn install --pure-lockfile |
| npm install [package] | (N/A) |
| npm install --save [package] | yarn add [package] |
| npm install --save-dev [package] | yarn add [package] [--dev/-D] |
| (N/A) | yarn add [package] [--peer/-P] |
| npm install --save-optional [package] | yarn add [package] [--optional/-O] |
| npm install --save-exact [package] | yarn add [package] [--exact/-E] |
| (N/A) | yarn add [package] [--tilde/-T] |
| npm install --global [package] | yarn global add [package] |
| npm rebuild | yarn install --force |
| npm uninstall [package] | (N/A) |
| npm uninstall --save [package] | yarn remove [package] |
| npm uninstall --save-dev [package] | yarn remove [package] |
| npm uninstall --save-optional [package] | yarn remove [package] |
| npm cache clean | yarn cache clean |
| rm -rf node_modules && npm install | yarn upgrade |
安装过程可能有点慢,安装完成后,如下
# Project initialization finished! # ======================== To get started: cd epimetheus-frontend npm run dev Documentation can be found at https://vuejs-templates.github.io/webpack
这时,我们可以进入 epimetheus-frontend , 并在控制台运行 npm run dev ,即可开始运行我们的项目
epimetheus$ cd epimetheus-frontend
epimetheus/epimetheus-frontend$ npm run dev
> epimetheus-frontend@1.0.0 dev /Users/zhangyunan/project/scoding/epimetheus/epimetheus-frontend
> webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
13% building modules 29/31 modules 2 active ...theus/epimetheus-frontend/src/App.vue{ parser: "babylon" } is deprecated; we now treat it as { parser: "babel" }.
95% emitting
DONE Compiled successfully in 2886ms 下午1:49:57
I Your application is running here: http://localhost:8080
从控制台信息可以看出,访问路径为: http://localhost:8080
这样准备工作基本就完成了
这里使用 VSCode 进行开发,你也可以使用 Webstorm , 两个都可以,在使用 VSCode 的时候,可以直接在终端使用 code 命令在VSCode打开执行文件或者目录,
例如:
epimetheus/epimetheus-frontend$ code .
则会将当前文件夹 epimetheus/epimetheus-frontend 在 VSCode 中打开,
如何你安装 VSCode 后,使用 code 命令时,提示 not fund, 可以通过 查看 -> 命令面板 输入 code 进行安装
这里使用了 VSCode ,打开项目后如图:
├── build/ # webpack config files │ └── ... ├── config/ │ ├── index.js # main project config │ └── ... ├── src/ │ ├── main.js # app entry file │ ├── App.vue # main app component │ ├── components/ # ui components │ │ └── ... │ └── assets/ # module assets (processed by webpack) │ └── ... ├── static/ # pure static assets (directly copied) ├── .babelrc # babel config ├── .editorconfig # indentation, spaces/tabs and similar settings for your editor ├── .eslintrc.js # eslint config ├── .eslintignore # eslint ignore rules ├── .gitignore # sensible defaults for gitignore ├── .postcssrc.js # postcss config ├── index.html # index.html template ├── package.json # build scripts and dependencies └── README.md # Default README file
其中,我们主要修改 src 下文件,上面提到项目访问端口为: 8080 , 为了防止与其他项目造成冲突,这里将端口改为: 7000 , 具体配置在 config/index.js 文件中
这里使用了
官网: http://element-cn.eleme.io/#/zh-CN/component/installation
这里我们进入刚才的项目目录:并执行 yarn add element-ui
epimetheus/epimetheus-frontend$ yarn add element-ui yarn add v1.15.2 [1/5] :mag: Validating package.json... [2/5] :mag: Resolving packages... [3/5] :truck: Fetching packages... [4/5] :link: Linking dependencies... [5/5] :hammer: Building fresh packages... success Saved lockfile. success Saved 6 new dependencies. info Direct dependencies └─ element-ui@2.13.2 info All dependencies ├─ async-validator@1.8.5 ├─ deepmerge@1.5.2 ├─ element-ui@2.13.2 ├─ normalize-wheel@1.0.1 ├─ resize-observer-polyfill@1.5.1 └─ throttle-debounce@1.1.0 :sparkles: Done in 8.36s.
在 main.js 中写入以下内容:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';
Vue.use(ElementUI);
new Vue({
el: '#app',
render: h => h(App)
});
配置完成后的 main.js 文件为:
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App'
import router from './router'
Vue.config.productionTip = false
Vue.use(ElementUI)
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
render: h => h(App),
components: { App },
template: '<App/>'
})
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。
也就是通过 Vuex ,各个组件可以实时的共享状态
官网: https://vuex.vuejs.org/zh-cn/intro.html
首先我们先安装它 yarn add vuex
epimetheus/epimetheus-frontend$ yarn add vuex yarn add v1.15.2 [1/5] :mag: Validating package.json... [2/5] :mag: Resolving packages... [3/5] :truck: Fetching packages... [4/5] :link: Linking dependencies... [5/5] :hammer: Building fresh packages... success Saved lockfile. success Saved 1 new dependency. info Direct dependencies └─ vuex@3.4.0 info All dependencies └─ vuex@3.4.0 :sparkles: Done in 5.33s.
首先在 src 下创建 store 文件夹并在其下创建 store.js 文件
即 src/store/store.js , 同时创建 src/assets/util/cookie.js
src/assets/utils/cookie.js文件内容
该文件主要用于操作cookie
let cookie = {
setCookie (cname, value, expiredays) {
let exdate = new Date()
exdate.setTime(exdate.getTime() + expiredays)
exdate.setDate(exdate.getDate() + expiredays)
document.cookie = cname + '=' + escape(value) + ((expiredays == null) ? '' : ';expires=' + exdate.toGMTString())
},
getCookie (name) {
let reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
let arr = document.cookie.match(reg)
if (arr) {
return (arr[2])
} else {
return null
}
},
delCookie (name) {
let exp = new Date()
exp.setTime(exp.getTime() - 1)
let cval = cookie.getCookie(name)
if (cval != null) {
document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'
}
}
}
export default cookie
这里定义了 userInfo 用来保存当前的用户信息,包含一个 name 和 token
import Vue from 'vue'
import Vuex from 'vuex'
import cookie from '../assets/util/cookie'
Vue.use(Vuex)
const userInfo = {
name: cookie.getCookie('name') || '',
token: cookie.getCookie('token') || ''
}
const store = new Vuex.Store({
state: {
userInfo: userInfo
},
mutations: {
setUserInfo (state) {
state.userInfo = {
name: cookie.getCookie('name'),
token: cookie.getCookie('token'),
}
}
}
})
export default store
在 main.js 添加 Vuex 配置,
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App'
import router from './router'
import store from './store/store'
Vue.config.productionTip = false
Vue.use(ElementUI)
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
render: h => h(App),
components: { App },
template: '<App/>'
})
Promise based HTTP client for the browser and node.js
axios 是一个基于 Promise 的 http client, 通过他,我们向后端进行数据交互,如果你不喜欢它,可以使用 jquery 的 ajax 代替.
我们来安装一下
epimetheus/epimetheus-frontend$ yarn add axios yarn add v1.15.2 [1/5] :mag: Validating package.json... [2/5] :mag: Resolving packages... [3/5] :truck: Fetching packages... [4/5] :link: Linking dependencies... [5/5] :hammer: Building fresh packages... success Saved lockfile. success Saved 2 new dependencies. info Direct dependencies └─ axios@0.19.2 info All dependencies ├─ axios@0.19.2 └─ follow-redirects@1.5.10 :sparkles: Done in 4.39s
修改 main.js 文件
加入
import './axios_config/' import Axios from 'axios' Vue.prototype.$http = Axios
https://github.com/zhangyunan1994/epimetheus-frontend