Django и современные библиотеки JS (3 часть серии)
(Примечание: эта статья изначально опубликована на Cbsofyalioglu.com При строительстве веб-сайтов Стамбул Частный перевод , Передача круизного порта в Стамбуле и Измир тревога Системлери Несомненно
В предыдущей части мы построили Django Backend и API GraphQL. В этой части мы будем интегрировать проект Django с Svelte.
Таким образом, необходимо следовать первой части учебника.
Что такое SVELTE и как он отличается от реагирования?
Я сказал, что мне нравится Питона и его экосистема. Мне также нравятся со временными компиляторами и языковыми медами, такие как Cython, который действительно повышает производительность Python. Когда я узнал, что JavaScript является интерпретированным языком, я пытался посмотреть эквивалент Цитона. Из-за разных компиляторов браузеров я не мог найти то, что хочу, и это сделало разочарование. Может быть, это причина, по которой я чувствую волнение, когда я даю Свелту шанс.
Если вы не попробовали Свелту раньше, вы можете дать ему шанс. Интерактивные API и учебные пособия Svelte также стоит похвалы. Быть знаком с Svelte API и учебники определенно рекомендуется.
Когда я говорю о Свелте, я строго говоря о Svelte 3. Это еще одна библиотека JavaScript, написанная Rich Harris. Что делает Svelte Special:
- Это действительно реактивная библиотека, и она не использует виртуальный DOM, как реагировать. Следовательно, нет расчетов Diff VDOM.
- Он имеет компилятор и при создании приложения, он производит оптимизированный код JavaScript. В конце концов, код SVELTE почти исчезает, и у вас ванильный JavaScript.
- Вы можете написать HTML, CSS и JavaScript в одном файловом компонент, и не будет глобальных загрязнений CSS.
Да, реагировать революционер. Тем не менее, сколько раз мы должны иметь дело с проблемами синхронизации Virtual DOM или дополнительное бремя для даже очень небольших операций, находятся на другой стороне медальона.
Конфигурация SVELTE с WebPack с нуля
Шаг 1: Настройка среды разработки
(Примечание. Если вы уже установили узел, вы можете пропустить эту часть)
Мы будем использовать бэкэнд узела для среды разработки. Поэтому нам нужно установить узел и узел Package Manager NPM. Чтобы предотвратить потенциальные проблемы зависимости, мы создадим чистую среду узла. Я буду использовать NVM, который является диспетчером версии узла, и он позволяет нам создавать изолированные среды узла. В вашем терминале запустите код ниже.
Настройка узла среды с NVM
В вашем терминале запустите код ниже.
# install node version manager wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash # check installation command -v nvm # should prints nvm, if it doesn't, restart your terminal
# install node # node" is an alias for the latest version # use the installed version nvm use node nvm install node
Теперь мы можем создавать каталог Frontend в Django Project. Перейдите в корневой каталог проекта. «Бэкэнд/»
В вашем терминале копируйте и вставьте код.
# create frontend directory mkdir FRONTEND cd FRONTEND # now your terminal directory should be # backend/FRONTEND # create a node project npm init # you may fill the rest
Теперь мы можем установить фронт-концевые и разработка библиотек.
# install svelte and other libs npm install --save-dev svelte serve cross-env graphql-svelte # install webpack and related libs npm install --save-dev webpack webpack-cli webpack-dev-server # install webpack loaders and plugins npm install --save-dev style-loader css-loader svelte-loader mini-css-extract-plugin npm install --save node-fetch svelte-routing
Обновление package.json Часть сценариев, как показано ниже. Ваш файл должен выглядеть так и игнорировать версии.
{ "name": "django-svelte-template", "description": "Django Svelte template. ", "main": "index.js", "scripts": { "build": "cross-env NODE_ENV=production webpack", "dev": "webpack-dev-server --content-base ../templates" }, "devDependencies": { "cross-env": "^7.0.2", "css-loader": "^3.5.3", "graphql-svelte": "^1.1.9", "mini-css-extract-plugin": "^0.9.0", "serve": "^11.3.1", "style-loader": "^1.2.1", "svelte": "^3.22.3", "svelte-loader": "^2.13.6", "webpack": "^4.43.0", "webpack-cli": "^3.3.11", "webpack-dev-server": "^3.11.0" }, "dependencies": { "node-fetch": "^2.6.0", "svelte-routing": "^1.4.2" } }
Давайте создадим приложение необходимые файлы и папки для SVELTE. В корневом каталоге проекта « » Backend/’ Откройте свой терминал.
# create HTML file of the project cd templates touch index.html # change directory to backend/FRONTEND cd ../FRONTEND mkdir src touch index.js touch webpack.config.js # change directory to backend/FRONTEND/src cd src touch App.svelte touch MovieList.svelte touch MoviePage.svelte touch api.js
Шаг 2 – Конфигурация WebPack
Что такое WebPack? WebPack – это модуль Bundler и задача. Мы подключим все наше приложение JavaScript, включая CSS Styling в два файла JavaScript, если вы предпочитаете вывести только один файл. Из-за богатых плагинов вы также можете сделать много вещей с WebPack, как сжатие с различными алгоритмами, устраняя неиспользуемый код CSS, извлечение CSS в разные файлы, загружая ваш пучок в облачный провайдер, такой как S3 etc …
Я сделал два разных параметра WebPack в одном файле. Одним из них является для развития среды развития, а другой – для производственной среды. Также обратите внимание, что мы не оптимизируем эти конфигурации.
Скопируйте/вставьте следующий код в ***** webpack.config.js ***** файл.
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const path = require('path'); const mode = process.env.NODE_ENV || 'development'; const isEnvProduction = mode === 'production'; const productionSettings = { mode, entry: { bundle: ['./index.js'] }, resolve: { alias: { svelte: path.resolve('node_modules', 'svelte') }, extensions: ['.mjs', '.js', '.svelte'], mainFields: ['svelte', 'browser', 'module', 'main'] }, output: { path: path.resolve(__dirname, '../static'), filename: 'js/[name].js', chunkFilename: 'js/[name].[id].js' }, optimization: { minimize: true, runtimeChunk: false, }, module: { rules: [ { test: /\.svelte$/, use: { loader: 'svelte-loader', options: { emitCss: true, hotReload: true } } }, { test: /\.css$/, use: [ /** * MiniCssExtractPlugin doesn't support HMR. * For developing, use 'style-loader' instead. * */ MiniCssExtractPlugin.loader, 'css-loader' ] } ] }, devtool: false, plugins: [ new MiniCssExtractPlugin({filename: '[name].css'}) ], }; const devSettings = { mode, entry: { bundle: ['./index.js'] }, resolve: { alias: { svelte: path.resolve('node_modules', 'svelte') }, extensions: ['.mjs', '.js', '.svelte'], mainFields: ['svelte', 'browser', 'module', 'main'] }, output: { publicPath: "/", filename: 'static/js/bundle.js', chunkFilename: 'static/js/[name].chunk.js', }, devtool: 'source-map', devServer: { historyApiFallback: true, stats: 'minimal', }, module: { rules: [ { test: /\.svelte$/, use: { loader: 'svelte-loader', options: { emitCss: true, hotReload: true } } }, { test: /\.css$/, use: [ /** * MiniCssExtractPlugin doesn't support HMR. * For developing, use 'style-loader' instead. * */ 'style-loader', 'css-loader' ] } ] }, mode, plugins: [ ], } module.exports = isEnvProduction ? productionSettings : devSettings;
Шаг 3 – Создайте одностраничное приложение со Svelte
Во-первых, заполните « » Backend/frontend/index.js ‘.
import App from './src/App.svelte'; const app = new App({ target: document.body, }); window.app = app; export default app;
Далее заполните файл «app.svelte» с правильной логикой.
Перед маршрутизацией страниц я сначала напишу запросы на стороне клиента. Пожалуйста, откройте API.JS и скопируйте/вставьте код ниже.
import { GraphQLProvider, reportCacheErrors } from "graphql-svelte"; const client = GraphQLProvider({ url: 'http://127.0.0.1:8000/graphql', headers: () => ({ "content-type": "application/json", Accept: 'application/json' }) }) client.graphql.on('cache', reportCacheErrors) // our first query will requests all movies // with only given fields // note the usage of string literals (`) export const MOVIE_LIST_QUERY = ` query movieList{ movieList{ name, posterUrl, slug } } ` // Note the usage of argument. // the exclamation mark makes the slug argument as required // without it , argument will be optional export const MOVIE_QUERY = ` query movie($slug:String!){ movie(slug:$slug){ id, name, year, summary, posterUrl, slug } } ` // This is generic query function // We will use this with one of the above queries and // variables if needed export async function get(query, variables = null) { const response = await client.get({ query , variables }) console.log("response", response); return response }
Теперь страницы маршрута: Movielist.svelte будет отображаться на домашней странице, поскольку мы определили в вышеупомянутом. Если пользователь нажимает на любую карту фильма, то файл MoviePage.svelte будет отображаться.
Заполните movileist.svelte.
{#await movielist} loading {:then response} {#if response.data.movieList.length > 0} {#each response.data.movieList as movie}{/each} {/if} {:catch error}![]()
{movie.name}
Something went wrong: {error.message}
{/await}
Также заполните MoviePage.svelte в соответствии с этим.
{#await moviedata}Movie {slug} is loading
{:then moviedata} {#if moviedata.data}{/if} {:catch error}![]()
{moviedata.data.movie.name}
{moviedata.data.movie.summary}
Something went wrong: {error.message}
{/await}
Запустите приложение SVELTE в среде разработки
В среде разработки мы будем запускать два разных сервера. Когда наше приложение SVELTE запущено, он запрашивает данные с сервера Django. После того, как наступит ответ, сервер разработки WebPack Development представляет страницу с правильными данными. Это только для этапа развития.
Когда мы завершаем интерфейс разработки, мы построим и связываем приложение для клиента. После того, как тогда мы начнем Django Server, и это будет единственный сервер, который мы будем использовать в производственной среде, как я обещаю раньше.
Перейдите в корневую папку проекта Django. « * Backend/’ *
Выполните команду ниже и сделайте сервер Django Ready для запросов на передний план.
# execute it on the root folder of Django 'backend/' python manage.py runserver
Откройте другой терминал и измените каталог на « Backend/Frontend «
# On another terminal npm run start
Когда приложение SVELTE успешно скомпилировано, откройте свой браузер «Localhost: 8080/».
Вы должны увидеть аналогичный экран, похожий на изображение ниже.
Movileist.svelte сделает экран
Экран MoviePage.svelte сделает это, если пользователь нажимает на любую карту фильма
Что произойдет в данный момент?
На данный момент “/” Бортовая страница будет оказана. Из-за наших конфигураций маршрутизации файл movileist.svelte будет отображаться первым. Если пользователь нажимает на любую фильм, то файл MoviePage.svelte будет отображаться относительно его значения слизни.
Мы успешно интегрируем Django и Svelte. Теперь сделайте производственную сборку.
Интеграция Django и Svelte в производственной среде
Теперь вы можете остановить сервер WebPack во время Держать сервер Django elive Отказ
В каталоге Backend/Frontend выполните команду ниже.
npm run build
Это будет строить и заблокировать все ваше приложение Svelte в файле Bundle.js. Когда процесс соединения окончен, перейдите к URL-адресу сервера Django в вашем браузере. -> “127.0.0.1:8000/”
Вы должны увидеть те же экраны выше. Также обратите внимание на статическую папку, которая имеет новые файлы, исходящие из пакета WebPack.
ЗАКОНЧЕННЫЙ
Это код REPO всех трех частей.
(Примечание: эта статья изначально опубликована на Cbsofyalioglu.com При строительстве веб-сайтов Аэропорт Стамбул трансфер , Передача круизного порта в Стамбуле и Istanbul Travel Guide Несомненно
Django и современные библиотеки JS (3 часть серии)
Оригинал: “https://dev.to/canburaks/django-and-modern-js-libraries-svelte-3-4a98”