Недавно у компании появился новый проект.Предыдущий проект Vue был построен с помощью Vue CLI2, а теперь он будет построен с помощью Vue CLI3.Я хотел бы записать реальный боевой процесс в этой статье.Если вы считаете, что эта статья полезно для вас, пожалуйста, как это. Спасибо. Продолжаем обновлять......
1. Установите Vue CLI3
- Сначала вам нужно удалить Vue CLI2 с помощью команды
npm uninstall vue-cli -gудалить; - введите команду
npm install -g @vue/cliУстановите Vue CLI3; - После завершения установки введите команду
vue --version, проверьте, выше ли номер версии Vue CLI 3.0, что означает, что установка прошла успешно.
Во-вторых, создайте проект Vue.
- Создайте новую папку, обратите внимание, что имя файла лучше не использовать на китайском языке, действуйте, как показано ниже;
- введите команду
vue create flow_manage_platform,flow_manage_platformимя проекта; - Нажимайте клавиши вверх и вниз, чтобы выбрать пункт Ручной выбор функций (выбрать функции вручную), по умолчанию (babel, eslint) (установка по умолчанию);
- Нажимайте клавиши вверх и вниз, а также клавишу ввода, чтобы выбрать функцию для установки;
- Используйте режим истории маршрутизатора, нажмите Enter, чтобы перейти к следующему шагу;
- Выберите язык предварительной обработки CSS, выберите меньше и нажмите Enter, чтобы перейти к следующему шагу;
- Выберите в выделенных файлах конфигурации и настройте Babel, PostCSS и т. Д. Независимо от файла package.json;
- Сохранять ли конфигурацию установки, нажмите Enter, чтобы перейти к следующему шагу;
- Если появится следующее изображение, пора начинать загрузку проекта Vue;
- Если загрузка идет очень медленно, это проблема с сетью, вы можете подключить компьютер к мобильной сети;
3. Очистите проект Vue
В проекте Vue, построенном через Vue CLI, много бесполезных файлов и кода, который нужно один раз почистить.
1. Инициализация
- После завершения загрузки сначала открыть Package.json файл,
изменить на"scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build" },
Поскольку в Vue CLI2 используется"scripts": { "dev": "vue-cli-service serve", "build": "vue-cli-service build" },npm run devкоманда для запуска проекта. - использовать
npm installУстановите зависимости, после успешной установки выполнитеnpm run dev, открыть в браузере после успешного выполненияhttp://localhost:8080/, страница отображается, как показано на рисунке ниже, что указывает на то, что проект Vue был успешно построен.
2. Очистите файл index.html в общедоступном файле.
После очистки следующим образом:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
</head>
<body>
<div id="app"></div>
</body>
</html>
3. Очистите файл router.js
После очистки следующим образом:
import Vue from 'vue'
import Router from 'vue-router';
Vue.use(Router)
function load(component) {
return resolve => require([`./views/${component}`], resolve);
}
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/',
name: 'home',
component: load('home')
},
]
})
4. Очистите файл App.vue
После очистки следующим образом:
<template>
<div>
<router-view/>
</div>
</template>
5. Очистите папку представлений
Удалите файлы About.vue и Home.vue в папке представлений,
Создайте новый файл home.vue.Содержимое выглядит следующим образом:
<template>
<div>
欢迎使用Vue项目
</div>
</template>
6. Очистите папку компонентов
Удалите файл HelloWorld.vue в папке компонентов.
7. Очистите папку активов
Удалите текст logo.png в папке с ресурсами.
8. После очистки
сделай это сноваnpm run dev, открыть в браузере после успешного выполненияhttp://localhost:8080/, страница отображается, как показано на рисунке ниже, что указывает на то, что проект Vue был успешно очищен.
В-четвертых, настройте проект Vue.
После очистки он все еще не соответствует требованиям разработки нашего проекта, и нам нужно его настроить дальше.
1. Создайте новую папку API
Создайте новую папку API в папке src, в основном поместив файл конфигурации axios axios.js и файлы интерфейса.
2. Создайте новую папку миксинов
Создайте новую папку миксинов в папке src, в основном для размещения файлов миксинов Vue.
В папке minxins создайте новый файл index.js, в основном для глобального размещения смешанного содержимого.
export default {
data() {
return {
}
},
created(){
alert('全局混乱引入成功')
},
methods: {
}
}
Ввести глобальные миксины в main.js,
import mixins from './mixins';
Vue.mixin(mixins);
Вы можете увидеть всплывающее окно на странице браузера全局混乱引入成功указывая на то, что введение прошло успешно,
Назад minxins / index.js файлы
created(){
alert('全局混乱引入成功')
},
удалять!
3. Создайте новую служебную папку
Создайте новую папку службы в папке src, в основном размещая общедоступные методы и файлы конфигурации.
4. Настройте папку активов
- Создайте новую папку css в папке с ресурсами, в основном для размещения файлов стилей;
- Создайте новую папку с изображениями в папке с ресурсами, в основном для размещения файлов изображений, которые можно скомпилировать.
5, новый папка маршрутизатора
Создайте новую папку маршрутизатора в папке src,
Удалите файл router.js в папке src,
В папке маршрутизатора создайте новые файлы index.js и route.js,
Содержимое index.js:
import Vue from 'vue';
import Router from 'vue-router';
import routes from './routes';
Vue.use(Router);
// 路由配置
const router = new Router({
mode: 'history',
base: process.env.BASE_URL,
routes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
return savedPosition;
} else {
return {x: 0, y: 0};
}
}
});
router.beforeEach((to, from, next) => {
next();
});
router.afterEach((to, from, next) => {
window.scrollTo(0, 0);
});
export default router;
содержимое route.js:
function load(component) {
return resolve => require([`views/${component}`], resolve);
}
const routes = [
{
path: '/',
name: 'home',
component: load('home'),
meta: {
title: '首页'
}
},
{
path: '*',
redirect: {
path: '/'
}
}
];
export default routes;
6. Создайте новую папку магазина
Создайте новую папку хранилища под папкой SRC и поместите содержимое VEUEX,
Удалите файл store.js в папке src,
Создайте новую папку модуля в папке магазина,
Создайте новый файл demo.js в папке модуля,
const state = {
moduleTip: '欢迎使用Vuex模块',
};
const getters = {
moduleTip: state => state.moduleTip,
};
const mutations = {
SET_MODULETIP(state, data) {
state.moduleTip = data;
},
};
const actions = {};
export default {
state,
getters,
mutations,
actions
}
Создайте новый файл index.js в папке магазина,
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const debug = process.env.NODE_ENV !== 'production';
import demo from './module/demo';
const store = new Vuex.Store({
strict: debug,
state: {
tip: '欢迎使用Vuex',
},
getters: {
tip: state => state.tip,
},
mutations: {
SET_TIP(state, data) {
state.tip = data;
},
},
actions: {
},
modules: {
demo,
}
});
export default store;
Запишите в файл minxins/index.js,
import { mapGetters } from 'vuex';
export default {
data() {
return {
}
},
computed: {
...mapGetters(['tip','moduleTip'])
},
mounted(){
},
methods: {
}
}
Напишите в файле views/home.vue,
<template>
<div>
欢迎使用Vue项目
{{tip}}
{{moduleTip}}
</div>
</template>
Отображать на странице браузера:
欢迎使用Vue项目 欢迎使用Vuex 欢迎使用Vuex模块
Это указывает на то, что глобальный Vuex и модуль Vuex настроены успешно.
7. Псевдоним файла конфигурации
В Vue CLI3 конфигурация веб-пакета проекта заключается в создании нового файла vue.config.js в корневом каталоге для настройки.
Настройте содержимое в файле vue.config.js следующим образом:
const path = require('path');
function resolve(dir) {
return path.resolve(__dirname, dir)
}
module.exports = {
configureWebpack: {
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': resolve('src'),
'assets': resolve('src/assets'),
'css':resolve('src/assets/css'),
'images':resolve('src/assets/images'),
'views': resolve('src/views'),
'components':resolve('src/components'),
'api':resolve('src/api'),
'mixins':resolve('src/mixins'),
'store': resolve('src/store'),
'service':resolve('src/service'),
}
}
},
}
8. Закройте исходную карту
Закрытие исходной карты имеет два преимущества
- Сокращение времени упаковки и компиляции;
- Старайтесь не видеть исходный код в Sources с работающими инструментами разработчика F12.
Настройте содержимое в файле vue.config.js следующим образом:
module.exports = {
productionSourceMap: false,
}
9. Настройте элемент devServer
-
фиксированный порт
Иногда задняя часть устанавливает междоменный белый список для фиксации порта, а передняя часть должна взаимодействовать с фиксированным портом.
port: 8036, -
Открыть горячее обновление
hot: true, -
исправлен открытый браузер
open: 'Google Chrome',
Настройте содержимое в файле vue.config.js следующим образом:
module.exports = {
devServer:{
port: 8036,
hot: true,
open: 'Google Chrome'
}
}
В-четвертых, сброс стиля CSS
Создайте новый файл base.less в папке src/assets/css,
Содержимое файла следующее:base.less
Записать в файл main.js
import 'css/base/base.less';
5. Представьте библиотеку компонентов Element-Ui
-
Установить зависимости
воплощать в жизнь
npm i element-ui -saveЗаказ -
стиль импорта
в main.js
new VueВставьте следующий код передimport 'element-ui/lib/theme-chalk/index.css'; -
Полное введение библиотеки компонентов Element-Ui (выберите один из двух)
Если большинство компонентов Element-Ui в проекте приходится использовать, рекомендуется внедрение полного
в main.js
new VueВставьте следующий код передimport ElementUI from 'element-ui'; Vue.use(ElementUI); -
Представить библиотеку компонентов Element-Ui по запросу (выберите один из двух)
Возьмем в качестве примера введение компонента Button.
-
в main.js
new VueВставьте следующий код перед//注册element-ui组件 import { Button, } from 'element-ui'; const components = [ Button, ]; for (let k of components) { Vue.use(k); } -
Запишите в файл src/views/home.vue
<template> <div> 欢迎使用Vue项目 {{tip}} {{moduleTip}} <el-button>饿了吗Button组件</el-button> </div> </template> -
Если на странице браузера появляется следующая картинка, это означает, что импорт по запросу прошел успешно
-
5. Настройка тем (пакетное изменение стиля компонентов элементов)
-
Поскольку стиль элемента написан на sass, необходимо сначала установить плагины sass и sass-loader, выполнить
npm i sass sass-loader -DЗаказ; -
В папке src/assets/css/base создайте новые element_theme.scss и element_var.scss (различные переменные для стилей темы);
-
написать в main.js
import 'css/base/element_theme.scss'; -
Запишите в файл src/views/home.vue
<template> <div> 欢迎使用Vue项目 {{tip}} {{moduleTip}} <el-button type="primary">饿了吗Button组件</el-button> </div> </template> -
Нажмите F12, чтобы открыть инструменты разработчика, элемент проверки может видеть показанную рисунку
- Поиск в файле element_var.scss
#4574d0, как показано на рисунке ниже, замените его на$--color-primary: red !default;
- Отображение страницы браузера показано на рисунке ниже, то есть пользовательская тема выполнена успешно.
Шестое, установите библиотеку Jquery Js.
Хотя Vue манипулирует DOM с помощью data. Но в некоторых случаях удобнее использовать Jquery, например, для получения высоты элемента и динамического изменения высоты таблицы, чтобы зафиксировать голову.
- Выполнение заказа
npm i Jquery -save - Новый код Vue.config.js Файл:
const webpack = require('webpack'); module.exports = { configureWebpack: { plugins: [ new webpack.ProvidePlugin({ $:"jquery", jQuery:"jquery", "windows.jQuery":"jquery" }) ] }, } - Добавьте код в файл main.js:
import $ from 'jquery'; - Добавьте код в файл src/views/home.vue для проверки:
<template> <div class="p-wrap"> 欢迎使用Vue项目 {{tip}} {{moduleTip}} <el-button type="primary">饿了吗Button组件</el-button> </div> </template> <script> export default { mounted(){ $(".p-wrap").click(function(){ alert('Jquery安装成功') }); } } </script> - Щелкните текстовую часть страницы браузера, чтобы открыть всплывающее окно «Jquery успешно установлено», указывающее, что библиотека Jquery Js была успешно установлена.
Семь, о яме менее грузчика
Когда версия, соответствующая less-loader, равна 4.1.0, версия, установленная с less, должна быть 2.7.3, иначе она появится
ERROR in ./src/home/index.less
(./node_modules/_css-loader@1.0.0@css-loader!./
node_modules/_less-loader@4.1.0@less-loader/dist/cjs.js!./src/home/index.less)
Module build failed (from ./node_modules/_less-loader@4.1.0@less-loader/dist/cjs.js):
сообщить об ошибке
Восемь, установите плагин js-cookie
- Этот подключаемый модуль в основном используется для хранения, получения и удаления файлов cookie браузера. Наиболее часто используется для хранения токена, возвращаемого серверной частью после успешного входа в систему.
- Выполнение заказа
npm i js-cookie --save - Создайте новый файл cookie.js в файле src/service и запишите его в файл
import Cookies from 'js-cookie'; const TokenKey = 'token'; export function getToken() { return Cookies.get(TokenKey); } export function setToken(token, time) { return Cookies.set(TokenKey, token, { expires: time, path: '/' }); } export function removeToken() { return Cookies.remove(TokenKey); }
Девять, настроить axios
-
Выполнение заказа
npm i axios -save -
Создайте новый файл axios.js в папке src/api.
-
Настройте аксиомы в axios.js
-
Создайте новый экземпляр axios,
axios.create([config]),Основная конфигурация
timeoutУказывает количество миллисекунд, по истечении которого запрос истечет (0 означает отсутствие тайм-аута)headersПользовательский заголовок запроса, эта часть конфигурации должна быть согласована с бэкендом, иначе бэкэнд не получит ваши параметрыbaseURLНастройте адрес запроса бэкенда, который будет автоматически добавлен вurlфронт, сделатьurlДоступные относительные адресаimport axios from 'axios'; const service = axios.create({ timeout: 60000, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', "X-Requested-With": "XMLHttpRequest", }, baseURL: 'xxx', });В приведенной выше конфигурации формат данных, передаваемый от внешнего интерфейса к внутреннему, — это формат формы или формат JSON, например:
//Form格式 let data = new URLSearchParams(); data.append("page", currentPage); //JSON格式 let obj = new Object; obj.page=currentPage;Если серверная часть использует JAVA, обычно используйте формат формы.
Но когда вы хотите передать бинарные данные на сервер, вам нужно использовать формат FormData, например:
let data = new FormData(); data.append("page", currentPage);Затем также создайте новый экземпляр axios
const serviceForm = axios.create({ timeout: 60000, headers: { 'Content-Type': 'multipart/form-data; charset=UTF-8', "X-Requested-With": "XMLHttpRequest", }, baseURL: 'xxx', }); -
Настроить перехватчик HTTP-запросов
Перехватывать запросы до того, как они будут обработаны, или поймать
axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); });В общих проектах токен добавляется в заголовок запроса здесь, и конфигурация выглядит следующим образом
import { getToken } from 'service/cookie'; //http request 拦截器 在发送请求之前做些什么 let request = function (config) { const token = getToken(); if (token) { // 判断是否存在token,如果存在的话,则每个http header都加上token config.headers.token = token; } return config; };над
config.headers.tokenТокен — это параметр, который серверная часть сообщает для добавления токена в заголовок, и серверная часть также должна настроить заголовки, чтобы разрешить параметр с токеном, в противном случае это вызовет междоменное обращение.Перехват при записи очередной ошибки запроса
//http request 拦截器 在请求错误时做些什么 let request_err = function (err) { return Promise.reject(err); };Используйте эти перехватчики запросов для каждого экземпляра
service.interceptors.request.use(request, request_err); serviceForm.interceptors.request.use(request, request_err); -
Настроить перехватчик ответа http
Перехватывать ответы до того, как они будут обработаны, или поймать .
// 添加响应拦截器 axios.interceptors.response.use(function (response) { // 对响应数据做点什么 return response; }, function (error) { // 对响应错误做点什么 return Promise.reject(error); });В общих проектах возвращаемые данные предварительно обрабатываются здесь, а сообщения об ошибках обрабатываются пакетами, аналогично подсказкам.
Перехватить обработку до того, как ответ успешен
import { Message } from 'element-ui'; let response = function (res) { const data = res.data; const message = `${data.code}--${data.msg}` || '未知错误' if (res.status == 200) { if (data.code == 200) { return data; } else { Message({ message: message, type: 'error', }) } } };над
data.code,data.msgВсе это согласовывается с серверной частьюОбработка перехвата до отказа ответа
let response_err = function (err) { if (err.response) { const data = err.response.data; const message = `${data.code}--${data.msg}` || '未知错误' Message({ message: message, type: 'error', }) } return Promise.reject(err); };Используйте эти перехватчики ответов для каждого экземпляра
service.interceptors.response.use(response, response_err); serviceForm.interceptors.response.use(response, response_err);Наконец, два экземпляра axios доступны для внешнего мира.
Есть два способа
Один из них — повесить прямо под объектом окна, чтобы можно было использовать service и serviceForm непосредственно в других файлах.
window.service = service; window.serviceForm = serviceForm;Один из них - экспортировать с помощью экспорта, поэтому вам нужно сначала записать его в другие файлы.
import {service,serviceForm} from 'api/axios'export {service,serviceForm} -
Внесите файл конфигурации axios в файл main.js.
import 'api/axios' -
Создайте новый файл demo.js в папке src/api и напишите в нем запрос с параметрами post, get и get.
/* get请求 */ export function get() { return service.get('api/get'); } /* get请求带参数 */ export function get2(data) { return service.get('api/get2', { params: data }); } /* post请求带参数 */ export function post(data) { return service.post('api/post', data); } -
Использовать в src/views/home.vue
import * as API from 'api/demo'; export default { methods: { get() { API.get().then(res => { }).catch(err => { }) }, get2() { let data =new URLSearchParams; data.append('param',1) API.get2(data).then(res => { }).catch(err => { }) }, post() { let data =new URLSearchParams; data.append('param',1) API.post(data).then(res => { }).catch(err => { }) } } }
-
наконец
прикреплятьадрес проекта