Рубрики
Без рубрики

Сделать умножную разработку HTML сосать меньше с мопсом

Вдохновленный настоящим источником источника сказки. Представьте, что вы находитесь в списке вызовов для внештантного агентства в городе по вашему выбору. Теперь скажем, вы получите хорошее сообщение в вашем почтовом ящике. Вы открываете сообщение, и это выглядит довольно нормально. У нас есть

Автор оригинала: Jared Nutt.

Вдохновленный настоящей историей

Давайте сделаем путешествие …

Представьте, что вы находитесь в списке вызовов для внештантного агентства в городе по вашему выбору. Теперь скажем, вы получите хорошее сообщение в вашем почтовом ящике. Вы открываете сообщение, и это выглядит довольно нормально.

сообщение, и это выглядит довольно нормально.

У нас есть немедленная необходимость для разработчика, чтобы начать сегодня.

Будучи человеком, который любит есть еду, чтобы выжить, вы вводите некоторую информацию и применяете.

В течение пяти минут удара при отправке кнопка отправки вы получите вызов. Через 10 минут после этого вы получаете доступ к серверу.

Само собой разумеется, вы в срок. Этот крайний срок к концу дня.

Вы открываете HTML-файлы и посмотрите в них … в ужасе.

Код повсюду, грязно и дезорганизован. Не говоря уже о том, что вы должны внести коррективы на заголовок и нижний колонтитул … на пяти разных страницах.

Первое, что вы делаете, это пробежать через Претензия (Слава Богу за предел). Это очистило его, но есть еще несколько проблем. Это статический сайт HTML, что означает, что каждое изменение, которое вы делаете в глобальные вещи (заголовок, нижний колонтитул и так далее), вам придется копировать в Каждый файл. О, мой.

Что ты собираешься делать???

Просто, вы собираетесь взбить файл WebPack, чтобы обработать дерьмовую часть написания HTML, и вы собираетесь сделать это быстро.

Вот то, что вам нужно будет знать:

  • Javascript! (из-за Webpack)
  • HTML! (потому что это то, из чего сделан интернет)
  • CSS! (потому что кто любит уродливые вещи?)
  • Действительность! ( потому что это точка этой статьи!)
  • NPM (потому что это Бог)
  • Основные знания командной строки (потому что делают вещи с помощью загрузки глупы …)
  • Знаю, кто Jim Carrey (потому что GIFS)

Если вы не знакомы с мопсом, вы все равно можете управлять через это. Но если у вас есть время, читайте на нем. Я рекомендую обучить мопс с мопсами Отказ Или их документы . Это тоже в порядке, я думаю.

Вот версии, которые я использовал для этого:

  • HTML-погрузчик: 0,5,5,
  • HTML-WebPack-Plugin: 3.2.0,
  • PUG-HTML-погрузчик: 1.1.5,
  • WebPack: 4.12.0
  • WebPack-CLI: 3.0.8
  • NPM: 6.1.0
  • узел: 10.4.0

Обновление: Я сделал видео! Проверьте это, если вы не хотите читать, но предпочли бы слушать мой голос в течение 30 минут.

Вот как мне нравится организовать мою папку для этих типов проектов.

src/
oldHTML/
dist/
images/
css/
webpack.config

Мне нравится поставить все оригинальные HTML в отдельную папку, которую я не могу случайно удалить. WebPack немного добрее, чем говорят, глотает, что у меня удалили всю папку раньше? Эта структура достаточно хороша, чтобы начать нас.

Кроме того: я недавно вернулся обратно в NPM от пряжа по нескольким причинам. Одним из из них было то, что он перестал работать, и у меня было немного терпения, чтобы снова заставить его работать. Интересная статья здесь Если вы хотите прочитать больше.

В любом случае, init, что NPM.

npm init -y

Примечание: ( -y Если вы не хотите отвечать на какие-либо вопросы)

Установите зависимости разработки.

Не волнуйтесь, я объясню каждый, как мы идем.

npm install -D webpack webpack-cli pug-html-loader html-webpack-plugin html-loader

Добавьте несколько скриптов в Package.json

По умолчанию Package.json имеет один скрипт, но нам нужно добавить несколько.

"dev": "webpack --watch --mode development",
"prod": "webpack --mode production"

Это двое, которые я люблю включать. Первый запустит WebPack в режиме разработки (Примечание. Флаг – Mode – новый для WebPack 4), и следите за изменениями файла. Второе, когда мы хотим запустить WebPack в производстве, это обычно выделяет вещи.

Это должно выглядеть что-то подобное:

"name": "pugTut",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test":
  "dev": "webpack --watch --mode development",
  "prod": "webpack --mode production"
},
.....more code

Создайте пару стартерных файлов для проверки нашего конфигурации WebPack

WebPack нуждается в точке записи, поэтому давайте сделаем одну. Создать app.js В SRC/ папка. Это может быть пустым. Не имеет значения. Это также нужен начальный файл мопсов для компиляции. Создать index.pug Файл в SRC/ папка, а также.

Создать и настроить WebPack.config.js в корневом каталоге

Хорошо, если вы не использовали WebPack раньше, я собираюсь пройти через каждую часть индивидуально, чтобы дать вам (и, надеюсь, мне) идею WTF продолжается в этом файле конфигурации.

Во-первых, давайте объявляем наши зависимости.

// webpack.config.js
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');

путь Это нативная зависимость узла, поэтому вам не нужно беспокоиться о том, что требуется в вашем Package.json.

WebPack это, скважина …

Htmlwebpackplugin это то, как мы извлекаем HTML. Я не эксперт на том, как работает WebPack. Из того, что я понимаю, поскольку он предназначен для употребления JavaScript, мы должны иметь погрузчики в нашем файле конфигурации, чтобы вытащить такие вещи, как HTML и CSS. Htmlwebpackplugin Как мы делаем что-то полезное с HTML, который извлекается из погрузчиков.

Прохладный? Следующий шаг…

const pug = {
  test: /\.pug$/,
  use: ['html-loader?attrs=false', 'pug-html-loader']
};

Этот метод используется WES BOS. И мне это действительно нравится, поэтому я использую его. Мы должны определить правила о том, как обрабатывать определенные типы файлов, например .pug или .css. Поместив его в переменную, делает его более разборчивым, на мой взгляд. В любом случае, мы настроим тестовый случай с регентомЭксп, а затем определите погрузчики, которые мы хотим использовать. По какой-то причине погрузчики перечислены в обратном порядке, что вы думаете. Я уверен, что есть объяснение, но я не мог его найти.

Смущенный? Что это значит, если мы хотим использовать PUG для компиляции HTML, мы пишем его в порядке выше: наш HTML-погрузчик -> мопс погрузчик . Однако на самом деле, когда код работает, он запускает мопс загрузчик Сначала … Тогда HTML-погрузчик Отказ Ага.

Примечание: не беспокойтесь о ? attrs = false Сейчас я объясню это чуть позже.

Прохладный? Следующий шаг…

const config = {
  entry: './src/app.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].bundle.js'
  },
  module: {
    rules: [pug]
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'src/index.pug',
      inject: false
    })
 ]
};
module.exports = config;

Святое дерьмо. Это много вещей. Давайте сломаемся.

Вход Просто точка записи для нашего файла JS.

Выход Определяет, где мы хотим, чтобы наш файл JS пойти. Это не то, где наши HTML-файлы пойдут. Как упоминалось выше, путь это модуль узла. __dirname это переменная, которую мы можем получить от узла. Имя файла – это то, что мы хотим вызвать наш файл JS. [Имя] это замена. В этом случае он использует имя файла файла ввода. Вы также можете использовать [Хэш] Если вы хотите уникальный идентификатор.

модуль Определяет разные модули. Для целей этого учебника есть только один модуль с одним набором правил. правила Определяет правила, которые мы будем использовать для этого модуля. Мы бросаем мопс Переменная мы сделали ранее там. Так мило, так чисто.

Наконец, плагины – это то, где мы можем добавить любые третий материал. В нашем случае мы используем Htmlwebpackplugin сделать что-то с нашими файлами мопсов.

Имя файла Это то, что мы хотим, чтобы наш HTML-файл будет вызываться. Шаблон это файл мопса, который компилируют. вставлять Есть: «Введите все активы в данный шаблон. ” У меня это установлено значение false, потому что … ну, честно говоря, я не помню.

Один из самых приятных вещей о Htmlwebpackplugin. это то, что вы должны создать запись для Каждый HTML-файл. Я пытался понять это вокруг него, но не нашел простых решений.

// webpack.config.js
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const pug = {
  test: /\.pug$/,
  use: ['html-loader?attrs=false', 'pug-html-loader']
};
const config = {
  entry: './src/app.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].bundle.js'
  },
  module: {
    rules: [pug]
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'src/index.pug',
      inject: false
    })
 ]
};
module.exports = config;

Прежде чем мы будем двигаться дальше, давайте убедимся, что ваш код работает! Запустите скрипт.

npm run dev

Если все прошло хорошо, вы должны увидеть что-то вроде этого:

Мы прошли долгий путь. Вот подарок:

Вот где начинается магия. Я знаю, что похоже, что мы работаем на некоторое время с очень небольшим прибылью, но доверяйте мне … это того стоило.

Одной из наиболее важных функций для мопса является частичные. Идея состоит в том, чтобы иметь один файл, который содержит большую часть вашего глобального кода (голова, заголовок, нижний колонтитул, NAV и так далее) и иметь отдельные файлы для всего вашего контента.

Давайте сделаем пару файлов. Вы должны были создать index.pug файл уже, но давайте сделаем еще один, layout.pug Отказ

src/
- index.pug
- layout.pug

Файл макета в основном является основным шаблоном для всего сайта. Он будет держать все глобальные вещи, например, голова, заголовок и нижний колонтитул.

//- layout.pug
doctype html
html
  head
    title I'm a title
  body
    block header
    block content
    block footer
  script(src="somescript.js")

Я думаю, что-то объяснить, так это то, что мопс все на основе отступа, похоже на YAML. Это славно, потому что это означает, что не более закрывает теги! Однако это может бросить некоторые, особенно те, с дерьмовыми углублениями. Итак, просто начните медленно и убедиться, что все правильно отступают, и все будет в порядке.

Глядя на нашу layout.pug file, вы увидите некоторые знакомые HTML-теги, смешанные с незнакомыми. Я настоятельно рекомендую загрузить синтаксис подсветки для мопса в вашем редакторе выбора. Если вы используете VSCode, он должен пойти с ним по умолчанию. Спасибо Microsoft.

Я думаю, что это довольно легко выяснить, но давайте посмотрим на мясо документа, чтобы убедиться, что мы знаем, что происходит.

head
  title I'm a title
body
  block header
  block content
  block footer
script(src="somescript.js")

голова , Тело , Название и Сценарий нормальные бирки, но что, черт возьми, блокировать ? блокировать Как мы определяем динамический контент. По сути, это говорит мопс, что сюда будет идти сюда. Надеюсь, это будет иметь больше смысла, когда мы создаем наши индивидуальные файлы страницы.

Давайте воспользуемся этим файлом index.pug.

//- index.pug
extends layout
block content
  p Woah.

Глядя на наш файл индекса, он выглядит ужасно маленьким для целой HTML-страницы. Это из-за этого маленького расширяется Парень. Расширется говорит мопс, который вы хотите использовать другой файл мопсов в качестве шаблона, в нашем случае макет. Затем ниже этого Блокировка кончации т в отношении того, что мы ставим в нашу layout.pug файл.

Если у вас есть ваш веб-пакет на заднем плане, он должен перекомпилировать, и вы получите новую index.html В вашем Dist/ папка. Если нет, запустите WebPack снова.

Эти стартовые файлы в порядке и DANDY, но нам нужно сделать реальный прогресс. Нам нужно начать захватывать этот HTML и использовать его! К счастью, PUG распознает обычные старые HTML-теги, чтобы вы могли буквально скопировать все HTML-контент, который вы хотите, и просто вставьте его там.

Это может выглядеть что-то подобное:

extends layout
block content
  

blerb

Woah.

Хорошо, это не так просто.

Как я уже упоминал, мопс основан на отступе. Чтобы облегчить жизнь на себе, я предлагаю удалить все отступы от файла HTML перед вставками в файл мопса. Он будет работать в основном, но вам, вероятно, придется немного зафиксировать его. Повезло за нас, PUG-HTML-Loader скажу нам, что с ним не так, когда он пытается компилировать. На следующем шаге есть несколько примеров распространенных проблем.

Я не собираюсь лгать, когда вы сначала бросаете в HTML, WebPack не понравится. Вот несколько вещей, чтобы посмотреть на:

Изображений

  1. Убедитесь, что ссылки на изображения хороши. По какой-то причине он часто терпит неудачу, если SRC вместо SRC = “/Images/”

2. Ранее я обещал вернуться к тому, что ? attrs = false Был, ну, вот мы!

Это реклама из HTML-погрузчик Сайт объясняет, что это делает.

html-loader?attrs=false

Javascript

Мопс не играет приятно с JS в тегах сценария. Если вы встаете в регулярное открытие и закрытие меток JS Script, это может работать хорошо. Однако, если вы хотите использовать тег сценария PUG, просто убедитесь, что добавьте период в конце, как это:

Очевидно, что это бесполезно, если вы делаете только индексную страницу. Для того, что вы делаете, просто создайте новый файл для каждой страницы, которую вы хотите. Кроме того, обязательно сделайте новую Htmlwebpackplugin Записи в плагины Раздел в WebPackack.

Это заканчивается так:

//webpack.config.js
...previous code...
plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'src/index.pug',
      inject: false
    }),
    new HtmlWebpackPlugin({
      filename: 'contact.html',
      template: 'src/contact.pug',
      inject: false
    })
  ]
...more code...

Вам не нужно немедленно преобразовать все в формате мопса. На самом деле, если у вас есть огромный сайт с помощью HTML-тонны HTML, вы можете сделать это, как вы идете, но это облегчает.

Включает в себя

Это не было бы очень хорошим учебником, если бы мы не говорили о включении. Помните эти блоки в файле макета? Ну, если вы не хотите, чтобы файл макета быть гигантом, вы можете создавать отдельные файлы, которые будут вытащены в компиляционном времени. Например, если вы хотите сделать один файл, который содержит всю информацию заголовка. Разрыв этого, этот путь также помогает существенно с отступом.

Создайте новый файл «Заголовок» в новой папке «Включает»:

src/
-- includes/
   header.pug

В этом файле положите все, что вы хотите быть в заголовке.

//- header.pug
header
  h1 I'm a header

Теперь вернитесь к Layout.pug и включите его.

//- layout.pug
doctype html
html
  head
    title I'm a title
  body
    block header
      include includes/header
    block content
    block footer
  script(src="somescript.js")

Есть тонна, что можно сделать с мопсом и WebPack. Однако я думаю, что мы достигли конца оснований. Тем не менее, проверьте Мистины Отказ Эти вещи удивительны.

Я настоятельно рекомендую доводить HTML медленно, в противном случае вы получите сразу отладки 1000 ошибок.

Оригинал: “https://www.freecodecamp.org/news/make-multipage-html-development-suck-less-with-pug-fb23bc8e7874/”