创建vue项目的基本流程

176 阅读3分钟

1.0 使用vue-router

1.1 基本使用

​ 先引入vue,再引入vue-router

<div>
  <!-- 创建router-link 属性to代表路由路径  -->
  <router-link to="/path"></router-link>
  
  <!-- 这是用来显示组件的占位符 -->
  <router-view></router-view>
</div>

​ 创建路由实例和规则

import Path from '../components/Path.vue'

let router = new VueRouter({
  routes: [
    { path: '/', redirect: '/path' },
    { path: '/path', component: Path }
  ]
})

​ 把当前的实例对象挂载到vue实例中

1.2 嵌套和编程式导航

// 嵌套路由
let router = new VueRouter({
  routes: [
    { path: '/path', component: Path, children: [
      { path: '/son', component: son }
    ] }
  ]
})

// 使用 this.$router 调用方法
this.$router.push('/login')
this.$route.go(-1) // 回退一步

1.3 动态路由传参

​ 首先在router-link中需要传入指定的参数格式

<div>
  <router-link to="/path/5"></router-link>
</div>

​ 在路由规则中接收对应匹配的参数格式

// 如何使用 num 的值
// 1.0 在组件标签中直接使用 $route.params.num
// 2.0 在路由规则中添加 props 为 true,然后再组件中通过 props 数组接收 num,再去组件标签中使用 num
// 3.0 在路由规则中可以传入静态的对象,但是用不了num
// 如果需要动态和静态的参数,就需要给props传入一个函数,形参为 route,动态参数通过route.params 获取

let router = new VueRouter({
  routes: [
    { path: '/path/:num', component: Path }
  ]
})

2.0 webpack的使用

​ 在当前项目中通过 npm 下载 webpack webpack-cli

2.1 ES6 模块化规范

​ AMD CMD CommonJS

export default {
  
}

import XXX from XXX
import "..."

2.2 webpack 基本使用

​ 创建 src 文件夹

​ 创建main.js index.html

​ 在 package.json 的 script 节点中,加入一个 dev 属性,值是 webpack

​ // 完成项目基本功能后

​ 在控制台中,输入

npm run dev

​ 在根目录中,产生一个 dist 目录,里面含有编译好的 main.js

2.3 根据文档进行配置

​ 创建 webpack.config.js

// 书写的规范是 Node的 CommonJS 模块化规范 

module.exports = {
  mode: 'development',
  entry: 要编译的文件绝对路径,
  output: {
    path: 指定编译的文件夹绝对路径,
    filename: 指定生成的文件名称
  }
}

2.4 使用插件

>#### webpack-dev-server

​ 自动打包,在磁盘的根目录中创建了 bundle.js 文件,创建虚拟服务器运行文件

​ 在 package.json 中可以配置参数, 自动打开文件,自定义运行端口,指定打开的浏览器

"dev": "webpack-dev-server --open 'google chorme' --hot --port 8888"

html-webpack-plugin

​ 会创建一个index.html 在磁盘中,自动引入上一步打包好的 bundle.js

const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebpackPlugin({
  template: './src/index.html',
  filename: 'index.html'
})


// 在导出的模块中配置插件
module.exports = {
  plugins: [ htmlPlugin ]
}

2.5 配置其他文件的 loader

>#### style-loader   css-loader
{ test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'] }

less-loader less

{ test: /\.less$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader'] }

post-css autoprefixer

​ 新建配置文件

const autoprefixer = require('autoprefixer')

module.exports = {
    plugins: [autoprefixer]
}

url-loader file-loader

{
                test: /\'jpg|jpeg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
                loader: 'url-loader',
                options: {
                    // 一般图片指定大小100kb所有  所以  10240
                    // 小于 100kb 的图片就转换成内联的 base64 格式的图片,方便快速加载
                    limit: 102400,
                    name: 'images/[name]-[hash:8].[ext]'
                }
}

​ 创建babel的配置文件 .babel.config.js

npm install babel-loader @babel/core @babel/runtime -D

npm install @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D

module.exports = {
        presets:["@babel/preset-env"],
        plugins:[ "@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties" ]
    }

babel-loader

//exclude为排除项,意思是不要处理node_modules中的js文件
{ test: /\.js$/, use: "babel-loader", exclude: /node_modules/ }

vue-loader vue-template-compiler

// 导入匹配vue文件的插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')

plugins: [new VueLoaderPlugin()],

{ test: /\.vue$/, use: 'vue-loader' }

2.6 vue的单文件组件

​ 后缀名 为 .vue 的文件

<tempale>
	<div>
    
  </div>
</tempale>

<script>
	export default {
    
  }
</script>

<style lang="less" scoped>

</style>

3.0 脚手架的使用

3.1 基本使用

npm i @vue/cli -g

3.2 两种创建文件的方式

vue create 项目名称

vue ui

> #### 选择当前安装预设包的方式

​ 第一安装选择手动的方式 Manually的方式

​ 如果有自己喜好的方式,可以在创建项目之后直接选中

选择需要安装的依赖包

​ Babel 、Router 、Linter

​ 如果手动配置,要选择的话用空格表示选中,回车下一步

是否使用历史模式

​ 不是,如果需要使用,一定配合后端的设置

选择代码风格检查的eslint方式

​ ESlint + Standard config

选择执行代码检查的时机

​ Lint on save 代码在保存的时候

选择配置文件生成的方式

​ In dedicated config files 使用单独的配置文件

是否将当前选择的项作为模板

​ 自己去体会

在windows中,自定义创建了项目,会在控制面板中显示项目的路径

在ui创建的项目中,可以在创建时,选择指定的项目存储目录

3.3 代码检查取消错误处理

创建 .prettierrc 文件

{
  "semi": false,
   "singleQuote": true
}

修改 .eslintrc.js

rules: {
    'space-before-function-paren': 0
}

如果不需要通过ui启动项目,可以单独声明配置文件

vue.config.js

moudule.export = {
  devServer: {
    open: true,
    port: 8080,
    hot: ture // 在ui面板中启动的项目保存就可以更新,但是这种方式需要加上这个属性
  }
}

4.0 项目思路

​ 删除了 views 文件夹

​ 删除了 components 内部的所有组件

​ 清空了App.vue 组件内部的引入内容

​ 把路由的 index.js 中引入的组件和规则全部删除

在使用脚手架配置的项目中,下载了插件 element-ui, 下载了本地依赖 less-loader less

4.1 完成登录

​ 注册了码云,绑定了邮箱,创建了仓库,创建了公钥,上传绑定了公钥

​ 配置了个人信息,定义了默认上传的路径,上传项目

4.1.1 创建组件

​ 在 components 组件中,创建了 Login.vue

​ 完成了页面的布局,使用了 element-ui , 完成了按需导入

import { Button } from 'element-ui'
Vue.use(Button)

​ 完成了盒子水平垂直居中,设置了头像和输入框,加入了双向数据绑定的功能

​ 在表单中,重置的方法resetFields()和预校验validate()的方法,但是需要通过给form设置 ref属性

this.$refs.validate(valid => {
 // valid 就是预校验的内容
})

// 校验规则的方式
// 给form表单加上 :rules 属性
// 在data数据中,声明规则
rules: {
  username: [
    { required: true, message: '提示信息', trigger: 'blur' },
    { min: 3, max: 10, message: '提示信息', trigger: 'blur' }
  ]
}

在main.js 中引入axios,并全局配置

import axios from 'axios'
axios.defaults.baseURL = '接口基本地址'
// 这句话是通用的,目的就是把当前各个组件需要使用的对象挂载到 vue 实例的原型上
Vue.prototype.$http = axios

相同的原理,在使用 Message 组件的时候也用到了

import { Message } from 'element-ui'
Vue.prototype.$message = Message

发请求的基本格式

login() {
  this.$refs.validate(async valid => {
   const { data: res} = await this.$http.post('/login', this.loginForm)
   
   // 在这里就可以使用提示面板和编程式导航
   if(res.meta.status !== 200) return this.$message.error('登录失败')
   
   window.sessionStorage.setItem('token', res.data.token)
   this.$router.push('/home')
  })
}

4.2 配置后端的过程

​ 安装 phpStudy , 安装它的目的是为了安装 MySQL,因为这种方式安装最简单

​ 导入sql数据库文件,如果导入不了,需要设置上传文件的最大值

​ 打开 php_ini 的文件 搜索 post_max 和 upload_max 的配置

​ 使用mysql的图形软件手动配置数据库文件

​ 启动phpStudy, 打开服务端文件,

npm i 下载所有的依赖包, 使用 node ./app.js 运行服务器

​ (如果配置过服务器,数据库有密码,要去config文件夹修改密码)