Всем привет!
Сегодня я решил сделать небольшой пост об элегантном решении для описания постоянных переменных в ваших приложениях. Я быстро просмотрел Интернет и не нашел каких-либо зрелых, органических решений для этого, поэтому, если вы читаете этот пост, я надеюсь, что это поможет!
Этот пост предназначен для новичков. :)
Я могу быть предвзятым, поскольку это мое решение, но я не думаю, что вы найдете лучшее решение для этого в другом месте (дайте мне знать, если есть!), И я уверен, что это точное решение повторялось много раз раньше . Несмотря на это, мы всегда должны искать лучшие решения и делиться ими с другими.
Язык
Мое решение предназначено для проектов JavaScript, использующих модули ES6 для импорта и экспорта. Эти функции не поддерживаются повсеместно во всех браузерах, поэтому убедитесь, что ваше приложение транслирует свой код, используя Babel или что-то подобное.
Установка
Существует миллион различных способов настройки файловой структуры вашего проекта, и у каждого свои предпочтения.
Я создал это конкретное решение в проекте React, который сильно зависит от Redux. Обычно я настраиваю свои приложения следующим образом:
src/ config/ styles/ utils/ views/
На самом деле я никогда не использовал постоянные переменные в JavaScript, кроме определения их в верхней части страницы, но недавно я решил улучшить свои методы и начать использовать их в своих проектах. Это помогает, когда вы работаете в команде, и определенно помогает поддерживать последовательность, когда ваше приложение использует Redux и у вас есть действия и редукторы, ссылающиеся на одни и те же типы действий.
В конце концов, я добавил новую папку в свою типичную архитектуру приложения:
src/ config/ constants/ styles/ utils/ views/
В папке constants/
есть index.js
файл, который, если вы не знали раньше, является файлом по умолчанию, который становится целевым, когда вы пишете import example from 'src/constants'
! Это очень упрощает создание чистого интерфейса в нашем коде.
// index.js export const COCA_COLA = 'COCA_COLA'; export const DR_PEPPER = 'DR_PEPPER'; export const PEPSI = 'PEPSI';
Мы можем использовать export
, чтобы выставить наши постоянные переменные в нашем приложении. Чтобы импортировать любую из этих констант, мы можем просто написать это:
import { DR_PEPPER } from 'constants';
Примечание, чтобы путь к файлу был только 'constants'
, я использую Webpack и устанавливаю resolve
в файле конфигурации Webpack как каталог src/
. Это означает, что всякий раз, когда мы используем import
, путь к файлу будет автоматически начинаться с src/
и идти оттуда. Так чисто!
Пока что кажется тривиальным сделать это сообщением в блоге… не так ли? Вроде. Мы еще не закончили.
Что происходит, когда в одном файле определены 300 констант? Это получается довольно долго и трудно разобрать! Конечно, есть лучшее решение.
Мы можем продолжить эту import
/ export
парадигму для наших констант, разделив их по контексту. Я имею в виду, что мы можем разделить константы, относящиеся к безалкогольным напиткам, в одном файле, и константы, относящиеся к картофельным чипсам, в другом файле.
Сделать это довольно просто!
Сначала мы разделим безалкогольные напитки в отдельный файл в той же папке. Возможно, в будущем вы решите создавать подпапки для дальнейшей организации своих констант, но, например, ради:
// drinks.js export const COCA_COLA = 'COCA_COLA'; export const DR_PEPPER = 'DR_PEPPER'; export const PEPSI = 'PEPSI';
Мы быстро создадим chips.js
файл констант в той же папке:
// chips.js export const SMITHS_ORIGINAL = 'SMITHS_ORIGINAL'; export const SMITHS_SALT_VINEGAR = 'SMITHS_SALT_VINEGAR'; export const RRD_SWEET_CHILLI = 'RRD_SWEET_CHILLI';
И свяжем их в наш исходный index.js
файл с помощью оператора *
, который дает нам export
, что позволяет нам быстро импортировать и экспортировать каждую константу из заданного файла в виде однострочника:
// index.js export * from './drinks'; export * from './chips.js';
Затем, чтобы импортировать константу из любого места нашего кода, это так же просто, как
import { COCA_COLA, SMITHS_ORIGINAL } from 'constants';
Если мы хотим быть более контекстными, мы все равно можем сделать это:
import { COCA_COLA } from 'constants/drinks';
Красиво в нем?