2017-12-28
Введение.
Я использовал свободный шаблон Osahan – Free Responsive Business Bootstrap Template, чтобы продемонстрировать работу фреймворка Nuxt.
Этот проект на GitHub можно посмотреть здесь
Демонстрацию этого проекта можно посмотреть здесь
Обзор Nuxt фреймворка
Nuxt.js — это фреймворк для универсальных приложений на Vue.js.
Основной задачей этого фреймворка является рендеринг пользовательского интерфейса в условиях абстракции от клиент-серверной архитектуры.
Цель разработки — создать фреймворк настолько гибкий, чтобы его можно было использовать и как основу, и как дополнение к уже существующим проектам на Node.js.
Nuxt.js содержит широкие возможности конфигурации приложения, что позволяет сделать разработку лёгкой и приятной.
Кроме того, предоставляется опция разработки: nuxt generate. С помощью неё можно статически генерировать приложения на Vue.js. На наш взгляд, эта опция может оказаться следующим большим шагом на пути разработки микросервисных веб-приложений.
Фреймворк Nuxt.js привносит множество возможностей в разработке веб-приложений, таких как: асинхронные данные, middleware, шаблоны и др.
Возможности
- Написание Vue-файлов
- Автоматическое разделение кода
- Серверный рендеринг
- Мощная система маршрутизации с асинхронными данными
- Обслуживание статических файлов
- Транспиляция ES6/ES7
- Сборка и минимизация JS & CSS
- Управление элементами в блоке head
- Горячая замена модулей при разработке
- Интеграция c ESLint
- Пре-процессоры: SASS, LESS, Stylus, и др.
Ресурсы
- Nuxt (JavaScript framework)
- Документация
- GitHub
- Vue.js (JavaScript framework)
- Документация
- API
- Сравнение с другими фреймворками
- Примеры
- Components & Libraries
- API
- jQuery
- Документация
- Bootstrap 3
- Документация
- jQuery plugin Bootstrap Validation
- Документация
- GitHub
- jQuery plugin Owl Carousel 2
- Документация
- GitHub
- Font Awesome - the iconic font and CSS toolkit
- Документация
- Animate.css - library of CSS animations
- GitHub
- Примеры
Работа приложения
- Используются реактивные возможности построения пользовательского интерфейса.
- Используются HTML-шаблоны для создания представлений веб-приложений, которые состоят из различных частей.
- Используется маршрутизатор Vue-Router для создания одностраничного приложения (SPA, Single-Page Applications).
- Для работы с локальными данными используется библиотека Vuex это паттерн управления состоянием и библиотека для приложений на Vue.js.
- Для построения пользовательского интерфейса используется Bootstrap 3, это один из популярных HTML, CSS, и JS фреймворков для разработки интерактивных мобильных проектов в Интернете.
Установка приложения
Предварительные требования
Клонируйте или загрузите vue-nuxt-static проект с GitHub.
Инсталируйте ваши зависимости
cd <project-name> npm install # Or yarn installПеременные окружения
Файл env.js должен находиться в корне проекта, если он отсутствует, то его нужно создать на основе примера файла env.example.js, иначе приложение будет выдавать ошибку. Файл env.js устанавливает переменные окружения.
Запуск вашего проекта
Development
npm run devПриложение будет запущено в режиме Разработки и будет выполнятся на http://localhost:3000
Production
npm run build
npm start
Приложение будет запущено в Рабочем режиме и будет выполнятся на http://localhost:3000
Генерация статического проекта
npm run generateПри построении вашего приложения будет генерироваться HTML файл для каждого вашего роутера и сохраняться по соответствующему пути.
Пример:
-| pages/
----| about.vue
----| index.vue
Будет сгенерировано:
-| dist/
----| about/
------| index.html
----| index.html
Таким образом вы сможете размещать ваш статический проект на любом статическом хостинге.
Структура приложения
Nuxt - Business Light проект имеет файловую структуру, показанную ниже см. пр.1.
пр.1
|-- .nuxt/ # Папка создается при выполнении команды * npm run dev/build *
| # содержит результирующие файлы при построении приложения
|-- assets/ # Папка содержит нескомпилированные файлы с
| # исходным кодом, такие как LESS, SASS или JavaScript
|-- config/ # Базовые параметры конфигурации
|-- dist/ # Папка создается при выполнении команды * npm run generate *
| # содержит статические файлы веб-приложения для размещения на статическом хостинге
|-- layouts/ # Папка содержит шаблоны приложения
|-- middleware # Папка содержит промежуточное программное обеспечение приложения
|-- node_modules/ # Папка содержит * npm * библиотеки
|-- pages/ # Папка содержит представления (views) и маршруты (routes)
|-- static/ # Папка содержит статические файлы. Каждый файл в этой папке доступен через /
|-- store/ # Папка содержит файлы Vuex хранилища
|-- .gitignore
|-- env.example.js # Пример файла окружения
|-- env.js # Файл окружения
|-- LICENSE.md
|-- nuxt.config.js # Файл содержит пользовательскую конфигурацию Nuxt.js
|-- package.json # Файл содержит список зависимостей и команды для вашего приложения
`-- README.md
Конфигурация
env.js
Файл env.js должен находиться в корне проекта, если он отсутствует, то его нужно создать на основе примера файла env.example.js, иначе приложение будет выдавать ошибку. В файле env.js устанавливаются пользовательские значения параметров вашей конфигурации, которые переустанавливают базовые параметры конфигурации.
Базовые параметры вашей конфигурации располагаются в папке app/config/env/. В этой папке расположены следующие файлы конфигурации:
- production.js
- development.js
- testing.js
В этих файлах устанавливаются базовые параметры конфигурации в зависимости от режима работы приложения: development, production, testing.
Конфигурация файла env.js см. пр.2.
export default {
env: 'testing',// development, production, testing
debug: true,
personal_data: {
copyright: '© 2016 OSAHAN - All Rights Reserved',
designed_with: 'Osahan Studio',
designed_with_url: 'https://www.facebook.com/iamgurdeeposahan',
contact: {
location: '795 Folsom Ave, Suite 600',
phone: '+01 234 567 890',
fax: '+01 234 567 890',
email: 'company@company.com',
website: 'www.yourdomain.com'
},
twitter: { url: '#', tag: '@Osahan' },
socials: {
facebook: { url: '#', icon: 'fa-facebook' },
twitter: { url: '#', icon: 'fa-twitter' },
google: { url: '#', icon: 'fa-google-plus' },
linkdin: { url: '#', icon: 'fa-linkedin' },
flickr: { url: '#', icon: 'fa-flickr' },
skype: { url: '#', icon: 'fa-skype' }
},
blog: {
url: '/blog/home1',
total: 3 // Count of posts on page
},
portfolio: {
url: '/portfolio/col-1',
total: 6, // Count of items on page
}
}
}
nuxt.config.js
Файл nuxt.config.js содержит пользовательскую конфигурацию Nuxt.js см. пр.3.
пр.3
const webpack = require('webpack')
module.exports = {
/*
** Router config
*/
router: {
middleware: 'set-config'
},
/*
** Cache
*/
cache: true,
/*
** Environment
*/
env: {
//env: 'testing',
baseUrl: process.env.BASE_URL || 'http://localhost:3000',
},
/*
** Headers of the page
*/
head: {
title: 'Vue Nuxt Static',
meta: [
{charset: 'utf-8'},
{name: 'viewport', content: 'width=device-width, initial-scale=1'},
{hid: 'description', content: "Vue Nuxt static project"}
],
script: [
{src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'},
{src: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'},
],
link: [
{rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'},
{rel: 'stylesheet', href: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'},
{rel: 'stylesheet', href: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css'},
{
rel: 'stylesheet',
href: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css'
},
{rel: 'stylesheet', href: '/css/animate.css'},
{rel: 'stylesheet', href: '/css/style.css'},
]
},
build: {
devtool: 'eval-source-map', // eval-source-map inline-source-map
vendor: [
'babel-polyfill',
'lodash',
],
plugins: [
new webpack.ProvidePlugin({
'_': 'lodash',
})
]
},
/*
** Global CSS
*/
css: [],
/*
** Customize the progress-bar color
*/
loading: {color: '#3B8070'}
};