Всем, у кого есть вопросы, рекомендуется задавать их здесь: https://gitee.com/wBekvam/vue-shop-admin/issues
Интернет-магазин для администраторов (проект на переднем крае) Предварительный просмотр
Если у вас есть какие-либо вопросы, пожалуйста, присоединяйтесь к группе для обсуждения, и мы постараемся ответить вам как можно скорее: 827923683
Используется для управления учётными записями пользователей, категориями товаров, информацией о товарах, заказами, статистическими данными и другими бизнес-функциями.
Система управления интернет-магазином для администраторов в целом использует режим разработки с разделением переднего и заднего конца, причём проект переднего конца представляет собой SPA-проект, основанный на стеке технологий Vue.
Node.js
Express
Jwt
Mysql
Sequelize
Задний исходный код скачать.
Реализован с использованием компонентов Element-UI:
// Создать и переключиться на ветку входа
git checkout -b login
// Объединить ветку входа с основной веткой
// 1. Переключитесь на основную ветку
git checkout master
// 2. Объедините ветку с основной
git merge login
// Отправить локальную ветку входа на github
git push -u origin login
Если пользователь не вошёл в систему, но напрямую обращается к определённой странице через URL, необходимо перенаправить его на страницу входа.
// Для объекта маршрутизатора добавьте beforeEach перед навигацией
router.beforeEach((to,from,next) => {
// Если вы переходите на страницу входа, просто пропустите
if (to.path === 'login') return next()
// Получить сохранённое значение токена из sessionStorage
const tokenStr = window.sessionStorage.getItem('token')
// Если нет токена, принудительно перейти на страницу входа
if(!tokenStr) return next('/login')
next()
})
Через перехватчик axios добавьте токен, чтобы гарантировать, что у него есть разрешение на получение данных.
// axios перехват
axios.interceptors.request.use(config => {
// Добавьте поле авторизации с токеном в заголовок запроса
config.headers.Authorization = window.sessionStorage.getItem('token')
return config
})
Модуль управления полномочиями используется для контроля различных операций, которые могут выполнять разные пользователи. Конкретно, управление полномочиями может быть реализовано через роли, то есть каждому пользователю назначается определённая роль, а роль включает различные функции.
По умолчанию импортированные с помощью синтаксиса import пакеты сторонних зависимостей объединяются в один файл, что приводит к проблеме большого размера упакованного файла после успешной сборки. Это называется проблемой chunk-vendors из-за большого объёма.
Чтобы решить эту проблему, можно использовать конфигурацию внешних модулей webpack для загрузки внешних ресурсов через CDN. Все сторонние зависимости, объявленные в узле externals, не будут упакованы.
module.exports = {
chainWebpack: config => {
config.when(process.env.NODE_ENV === 'production', config => {
config.entry('app').clear().add('./src/main-prod.js')
// В vue.config.js следующая конфигурация:
config.set('externals', {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios',
lodash: '_',
echarts: 'echarts',
nporgress: 'NProgress',
'vue-quill-editor': 'VueQuillEditor'
})
})
config.when(process.env.NODE_ENV === 'development', config => {
config.entry('app').clear().add('./src/main-dev.js')
})
}
}
В файле public/index.html в заголовке замените уже настроенные импорты (таблицы стилей) на импорт через CDN.
В файле public/index.html в заголовке удалите и замените уже настроенные импорты (файлы JavaScript) на импорт через CDN.
Размер после анализа: 2,6 МБ → 596,9 КБ.
Конкретные шаги:
Различные конфигурации сборки могут привести к различным содержаниям домашней страницы. Плагины используются для настройки.
Конфигурация в vue.config.js:
config.plugin('html').tap(args => {
args[0].isProd = true или false
return args
})
Модификация в index.html:
<!-- Режим разработки: использование import, режим выпуска: использование CDN -->
<title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev-' %>vue-mall</title>
<% if(htmlWebpackPlugin.options.isProd) { %>
css | js помещаются сюда
<% } %>
Компоненты Element-UI загружаются по мере необходимости.
Когда проект собирается, пакеты JavaScript становятся очень большими, что влияет на загрузку страниц. Если мы можем разделить различные компоненты, соответствующие разным маршрутам, на разные блоки кода и загружать их только при доступе к маршруту, это будет более эффективно.
Пример:
// Пример:
const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue')
const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue')
const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue')
// import Login from '../components/Login.vue'
const Login = () => import(/* webpackChunkName: "login_home_welcome" */ '../components/Login.vue')
// import Home from '../components/Home.vue'
const Home = () => import(/* webpackChunkName: "login_home_welcome" */
``` **Конкретное содержание статьи см. в разделе «Ссылки» внизу.**
### Проект запущен
#### Создание веб-сервера с помощью node
> Создаётся новый проект node и устанавливается express. С помощью express быстро создаётся веб-сервер, а папка dist, созданная после упаковки vue, размещается как статический ресурс. Ключевой код выглядит следующим образом:
```js
// 1. npm init -y
// 2. npm i express -S
// 3. Поместить упакованную папку dist в проект node
// 4.
const express = require('express')
const app = express()
app.use(express.static('./dist'))
app.listen(80, () => {
console.log('server runing at http://127.0.0.1')
})
// 5. Запустить проект с помощью узла app.js
Использование gzip для уменьшения размера файла и ускорения передачи данных.
// 1.npm install compression -S
// 2. Импортировать пакет
const compression = require('compression')
// 3. Включить промежуточное ПО
app.use(compression())
Получить сертификат ssl (https://freessl.org). Для корпоративных целей обычно используется платный ssh (http по умолчанию работает на порту 80, https по умолчанию работает на порту 443).
1. Установить pm2 глобально: npm i pm2 -g
2. Запустить скрипт (например, ./app.js) с помощью pm2: pm2 start
3. Просмотреть список запущенных проектов: pm2 ls
4. Перезапустить проект: pm2 restart
5. Остановить проект: pm2 stop
6. Удалить проект: pm2 delete
Module build failed (from ./node_modules/babel-loader/lib/index.js): Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main resolved in /home/vue/vueShop/vue-shop-admin/node_modules/@babel/helper-compilation-targets/package.json at applyExports (internal/modules/cjs/loader.js:498:9) at resolveExports (internal/modules/cjs/loader.js:514:23) ...
Решение: npm install @babel/helper-compilation-targets --save-dev
Закомментировать строку кода в файле eslintsrc.js: '@vue/standard'
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )