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

Как поделиться переменными через HTML, CSS и JavaScript с помощью WebPack

Ранее на этой неделе я прочитал статью, объясняющую, как CSS-In-JS замедляет рендеринг некоторых реагированных приложений и как статические CSS быстрее. Но CSS-in-js очень популярен, потому что, помимо прочего, вы можете стильно динамически использовать переменные JavaScript. В этом руководстве я покажу вам, как воссоздать

Автор оригинала: Adrien Zaganelli.

Ранее на этой неделе я читаю Статья Объясняя, как CSS-In-JS замедляет рендеринг некоторых приложений реагирования и как статические CSS быстрее. Но CSS-in-js очень популярен, потому что, помимо прочего, вы можете стильно динамически использовать переменные JavaScript.

В этом руководстве я покажу вам, как воссоздать этот Perk в любом из ваших веб-проектов благодаря WebPack (и я полагаю, вы знаете, как его использовать). Чтобы начать, мы хотим, чтобы WebPack установить наши исходные файлы в статическую распад/ папка .

Вы можете проверить Исходный код здесь Отказ

1. Настройте наше приложение

Скучная часть

Создайте папку для этого учебника, откройте свой терминал и инимите проект:

npm init -y

Первые вещи сначала, если она еще не сделана, установите node.js и WebPack :

npm install webpack webpack-cli --save-dev

Давайте создадим сценарий в нашем Package.json Это говорит WebPack использовать наш файл конфигурации:

  "scripts": {
    "build": "webpack --config webpack.config.js"
  }

В корне вашей папки создайте Globals.js Файл, где будут сохранены наши общие переменные:

module.exports = {
  myTitle: 'Hello freeCodeCamp!',
  myColor: '#42ff87',
};

Файл конфигурации WebPack выглядит так ( WebPack.config.js ). Создайте его в корне вашей папки:

module.exports = {
  entry: __dirname + '/app/index.js',
  output: {
    path: __dirname + '/dist',
    filename: 'index_bundle.js'
  },
};

Наш исходный код будет расположен в приложение папка. Создайте это так:

mkdir app && cd app

Вам понадобится index.html. и index.js Файлы на данный момент. Создайте эти файлы в приложение папка:

touch index.html index.js

Идеально! Вы все набор. ?

Ваша папка должна выглядеть так:

|-- node_modules/
|-- package.json
|-- webpack.config.js
|-- globals.js
|-- app/
	|-- index.html
	|-- index.js

2. Визуализируйте наши файлы HTML с помощью HTML-Webpack-Plugin

Это Приложение/index.html пустой. Давайте добавим некоторую разметку в нем, а затем добавить пользовательскую переменную:



  Webpack shared variables!


  

<%= myTitle %>

Как видите, мы пытаемся распечатать переменную в вашем HTML … Что невозможно! Чтобы сделать это работать, мы будем использовать html-webpack-plugin Это дает нам возможность использовать EJS синтаксис и вводить данные в него .

Плагин будет генерировать действующий HTML-файл. Тем временем вы должны переименовать ваши Приложение/index.html файл на Приложение/index.ejs Отказ

npm install --save-dev html-webpack-plugin

Давайте вернемся к нашему файлу конфигурации. html-webpack-plugin Имеет интересную Шаблоныпараметры Опция, которая позволяет нам пройти объект в качестве параметра. Включите плагин следующим образом в webpack.config.js :

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

module.exports = {
	// ... previous config, entry, output...
  plugins: [
    new HtmlWebpackPlugin({
      template: 'app/index.ejs',
      templateParameters: globals,
    })
  ]
};

Беги NPM запустить сборку и Ta-Daaaaaa «%>» Стал «Hello FreeCodeCamp»! Работа выполнена WebPack во время компиляции, когда он работает html-webpack-plugin Отказ

Видеть? Это было довольно просто с правильным инструментом: HTML ✅.

3. Используйте наши переменные в JavaScript

Феве, так много линий, просто для печати переменной! ? С учетом WebPack, вещи часто усложняются. Ну, это очень просто: в JavaScript просто импортируйте свой файл. В вашем Приложение/index.js :

import globals from '../globals.js'

document.write(
'
' +
  JSON.stringify(globals, null, 2) +
'
' );

Это распечатает объект наших глобалей на странице. Теперь давайте перейдем к CSS.

4. Используйте общие переменные в наших CSS

Вот наш последний босс?

Хорошо, ребята, ты меня понял … Я лгал. Мы не можем использовать наши глобалы непосредственно в CSS – мы должны использовать предварительно процессор. В этом примере мы будем использовать Sass Отказ

На стороне WebPack плагин не будет достаточно. Мы должны использовать погрузчик Конвертировать SASS в CSS. В этом случае нам нужны Sass-Loader Пакет, поэтому установите его в соответствии с документами:

npm install sass-loader node-sass css-loader style-loader --save-dev

Вернуться к кодированию. Теперь, когда у нас Sass, создайте свой стиль листового файла, Приложение/style.scsss :

h1 {
  color: $myColor;
}

Наша SASS настроена – теперь, как мы можем вводить данные в нее? Sass-Loader Упаковка имеет prependdata вариант! Но он принимает строку в качестве параметра, что означает, что ваши данные должны выглядеть так: «$ MyColor: Red; MyTitle:« ... »; Отказ

Мы должны автоматизировать это и преобразовать объект JavaScript в строку. Я не нашел посылку на NPM Это удовлетворило меня, поэтому я написал Мой собственный конвертер Отказ Загрузите файл и добавьте его в свой проект (в моем примере это Utils/jstoscss.js ).

Ваш финал webpack.config.js должен выглядеть так:

const globals = require("./globals.js");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const jsToScss = require("./utils/jsToScss.js");

module.exports = {
  entry: __dirname + "/app/index.js",
  output: {
    path: __dirname + "/dist",
    filename: "index_bundle.js"
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "app/index.ejs",
      templateParameters: globals
    })
  ],
  module: {
    rules: [
      {
        test: /\.s[ac]ss$/i,
        use: [
          // Creates `style` nodes from JS strings
          "style-loader",
          // Translates CSS into CommonJS
          "css-loader",
          // Compiles Sass to CSS
          {
            loader: "sass-loader",
            options: {
              prependData: jsToScss(globals)
            }
          }
        ]
      }
    ]
  }
};

Вот что вы должны увидеть:

Если вы все еще читаете это руководство, спасибо за внимание. Я надеюсь, что это поможет вам! WebPack – очень мощный инструмент, в котором вы должны больше копать?

NB: В вашем Dist/ Папка вы можете видеть, что не создается никаких CSS. Это потому, что я использую Стиль-погрузчик Чтобы сохранить эту демо просто просто. Чтобы генерировать файл CSS, посмотрите на Мини-CSS-экстракт-плагин Отказ

Оригинал: “https://www.freecodecamp.org/news/how-to-share-variables-across-html-css-and-javascript-using-webpack/”