前端学习十一(vuex、项目编译)
一、VUEX(个人理解是多个vue组件数据共享时使用)
vuex文档: https://next.vuex.vuejs.org/
1、环境准备
(1)安装依赖 npm install vuex --save
(2)安装插件 vue ui中安装插件vuex (会新建一个store的文件夹,且main.js也会自动导入store)
2、vuex的核心概念(state、getters、mutations、actions)
其实文档挺详细的,下面主要是对vuex的4个核心概念比较常用的内容介绍(modules主要是大型项目的时候使用,就不说了)
(1)src/store文件夹下index.js文件示例
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ // 用来定义全局的数据(多组件共用的数据) 不能双向绑定,修改只能通过mutations state: { }, // 定义全局的计算属性 getters: { }, // 定义全局的方法(不能定义异步的方法),也只有这里能修改state中的数据 mutations: { }, // 定义全局的异步方法(比如请求接口获取全局数据的方法),只能通过操作mutations来修改state actions: { }, modules: { } })
练习时的文件内容
import Vue from 'vue' import Vuex from 'vuex' import req from '../api/req.js' Vue.use(Vuex) export default new Vuex.Store({ // 用来定义全局的数据(多组件共用的数据) 不能双向绑定,修改只能通过mutations state: { projects: ['1', '2', '3'], name: 'vuex中的name字段', a: 2, b: 5 }, // 定义全局的计算属性 getters: { c(state) { return state.a * state.b } }, // 定义全局的方法(不能定义异步的方法),也只有这里能修改state中的数据 mutations: { addNum(state) { state.a++ }, // 修改state.projects的方法,给下面异步方法用 updateProjects(state, data) { state.projects = data } }, // 定义全局的异步方法(比如请求接口获取全局数据的方法),只能通过操作mutations来修改state actions: { async getProjects(content) { const r = await req.getProjects() // console.log(r.data.results) content.commit('updateProjects', r.data.results) } }, modules: { } })
(2)vue组件中的使用的2种方式
<h1>{{ $store.state.name }}h1> <h1>a*b={{ $store.getters.c }}h1> <button @click="$store.commit('addNum')">+button> <button @click="$store.dispatch('getProjects')">获取项目button>
练习时的文件内容
<template> <div> <h1>{{ name }}h1> <h1>{{ $store.state.name }}h1> <h1>{{ projects }}h1> <h1>a={{ a }}h1> <h1>a={{ b }}h1> <h1>a*b={{ $store.getters.c }}h1> <h1>{{ c }}h1> <button @click="$store.commit('addNum')">+button> <br> <button @click="addNum">+button> <button @click="$store.dispatch('getProjects')">获取项目button> <br> <button @click="getProjects">获取项目button> div> template> <script> import { mapState, mapGetters, mapMutations,mapActions } from 'vuex' export default { data() { return {} }, methods: { // 调用全局方法的另一种形式 ...mapMutations(['addNum']), ...mapActions(['addNum']), }, components: {}, mounted() {}, computed: { // 通过计算属性 返回vuex中定义的全局数据 // name() { // return this.$store.state.name // }, // 使用对象展开运算符将此对象混入到外部对象中 ...mapState(['name', 'projects', 'a', 'b']), ...mapGetters(['c']), }, created(){} } script> <style scoped> style>
二、编译运行
1、项目根目录下运行如下命令,会生成dist文件
npm run build
2、将上面的dist文件拷出来放到一个文件夹下(假设叫A文件夹),并在A下执行以下命令,用于初始化一个包管理文件,会生成package.json文件
npm init -y
3、在A下执行如下命令,安装express,安装完之后会生成package-lock.json文件
npm install express -g
4、在A下创建app.js文件
// 引用express const express = require('express') // 创建一个应用程序对象 const appe=express() // 指定静态文件路径 appe.use(express.static('./dist')) // 监听端口 appe.listen(8888,()=>{ console.log("服务已启动======="); })
5、使用node的方式启动项目(如果关掉窗口就会关闭服务)
node app.js
6、使用pm2的方式启动项目(项目名称自己取)
pm2 start app.js --name 项目名称
关于pm2
安装(要加-g,不然cmd识别不来pm2 命令)
npm install pm2 -g
停止项目
pm2 stop 项目名称
删除项目
pm2 delete 项目名称
查看项目
pm2 list