Цель этой статьи состоит в том, чтобы описать, как напрямую включить пользовательские значки Fontawesome в ваш Teamptry ProjectScript. Для твердого введения на настройку FONTAWESOME 5 с помощью Next.js и Teadercript, пожалуйста, смотрите VUONG DAGIN’S INVERE POST Отказ
Создайте каталог lib в корне вашего проекта Next.js. Затем создайте файл FAS-Custom-Integration.ts, в котором раскрывается магия. В самом фактическом файле пользовательских файлов нет TSX, поэтому папка библиотеки служит идеальным домом.
mkdir lib && cd lib && touch fas-custom-integration.ts && cd ..
Отправляйтесь к упаковке @fortawesome в Node_Modules. Тогда открыть fontawesome-svg-core/index.d.ts
Чтобы осмотреть содержимое файла Декларации:
import {IconDefinition, IconLookup, IconName, IconPrefix, IconPathData, IconPack } from '@fortawesome/fontawesome-common-types'; export {IconDefinition, IconLookup, IconName, IconPrefix, IconPathData, IconPack } from '@fortawesome/fontawesome-common-types'; export const dom: DOM; export const library: Library; export const parse: { transform(transformString: string): Transform }; export const config: Config; export function noAuto():void; export function findIconDefinition(iconLookup: IconLookup): IconDefinition; export function text(content: string, params?: TextParams): Text; export function counter(content: string | number, params?: CounterParams): Counter; export function toHtml(content: any): string; export function toHtml(abstractNodes: AbstractElement): string; export function layer( assembler: ( addLayerCallback: (layerToAdd: IconOrText | IconOrText[]) => void ) => void, params?: LayerParams ): Layer;
Это так, библиотекаристы логов 📚. Осмотрите первые две строки этого файла. Очень же импортируемые интерфейсы экспортируются сразу после этого. Что важно отметить, при просмотре файлов декларации, как именно здесь, где интерфейсы потенциальной утилиты, такие как надеждочника и iconlookup. Итак, давайте отправимся на Fontawesome-Common-Tyms/index.d.ts
и просмотреть содержимое его декларационного файла.
Интерфейсы служат для описания «формы», которые значения имеют в Teadercript. Лично я предпочитаю думать об этой форме как ее структуру. Если вы знакомы с биологией, вы можете вспомнить, что «структура диктует функцию» известна как центральная догма жизни. Это мышление может быть перенесено на использование интерфейса в Teadercript; Структура интерфейса вводит строгие типовые требования, которые вдыхают жизнь в код, который мы пишем. Это делают или умереть. Право, вернуться к взлому. С содержимым Fontawesome-Common-Tyms/index.d.ts
Перед нами ключ к выполнению пользовательской интеграции иконы становится все более четкой.
export type IconPrefix = "fas" | "fab" | "far" | "fal" | "fad"; export type IconPathData = string | string[] export interface IconLookup { prefix: IconPrefix; // IconName is defined in the code that will be generated at build time and bundled with this file. iconName: IconName; } export interface IconDefinition extends IconLookup { icon: [ number, // width number, // height string[], // ligatures string, // unicode IconPathData // svgPathData ]; } export interface IconPack { [key: string]: IconDefinition; } export type IconName = '500px' | 'accessible-icon' | 'accusoft' | 'acquisitions-incorporated' | // ...7,846 lines later... 'wrench' | 'x-ray' | 'yen-sign' | 'yin-yang';
Поскольку надежды и значок IceLookup представляют собой непосредственную утилиту для пользовательских значков.
4 (а). Iconlookup.
Этот интерфейс описывает два значения, префикс
и iconname
Отказ Значение префикса представляет собой строку, соответствующую «факсу», как определено типом ICONPREFIX выше (где, d, l, r или s). Бесплатная версия FONTAWESOME поддерживает префиксы «Fab» и «FAS», которые обозначают бренду и стиль солидных значков соответственно. Тогда есть iconname
который определяется типом iconname. Этот тип описывает массив строк, составив до 7 854 имен значков в длину.
export type IconPrefix = "fas" | "fab" | "far" | "fal" | "fad"; export type IconPathData = string | string[] export interface IconLookup { prefix: IconPrefix; // IconName is defined in the code that will be generated at build time and bundled with this file. iconName: IconName; } export type IconName = '500px' | 'accessible-icon' | 'accusoft' | 'acquisitions-incorporated' | // ...7,846 lines later... 'wrench' | 'x-ray' | 'yen-sign' | 'yin-yang';
4 (б). Ошибка
export interface IconDefinition extends IconLookup { icon: [ number, // width number, // height string[], // ligatures string, // unicode IconPathData // svgPathData -> string | string[] ]; }
Обратите внимание, что интерфейс надежды расширяется Интерфейс iconlookup. Это подразумевает, что форма, описываемая интерфейсом IconLookup, продлена или скопирована, к интерфейсу надежды. Итак, видно, что форма икона описывается массивом из пяти скалярных значений, это может быть не так просто, что значения префикса и значков знака, описываемые интерфейсом IconLookup, будут предложены к структуре нашего производного определения значка Отказ Ошибка расширения IconLookup подразумевает, что наше настраиваемое определение должно выглядеть следующим образом:
const CustomIconExample: IconDefinition & IconLookup = { prefix: 'fab', iconName: 'example-icon', icon: [ 64, // viewBox width 64, // viewBox height [], // ligatures '#000000', // fill/fillColor 'M24 22.525H0' // iconPath(s) ] }
С помощью этого давайте распустим пять скалярных ценностей, связанных с определением формы значка. Значения ширины и высоты, полученные из ViewBox SVG, составляют первые два скалярных значения, требуемые при определении значка. Просмотр SVG определяет положение и размер просмотра пользователей. В просмотру всегда есть четыре численные значения, которые неизменно заказываются следующим образом:
[min-x min-y width height]
Третье значение, участвующее в определении значка, соответствует лигациям, которые не важны для наших целей. Узнайте больше о лигации здесь Отказ Четвертое значение значка обозначает «заполнение» SVG или FillColor, как указано наличием Hex-значение. Наконец, путь икона (ы) заказываются последовательно на одной строке; Существует одно пространство, обозначающее разрывы строки в пути. Если SVG содержит более одного пути (D-значения), одно пространство используется для обозначения конца одного пути и начала следующего. Это значение всегда ограничено одной строкой кода (горизонтальная прокрутка тоже нуждается в любви).
С планом атаки, давайте доберемся до него! Из Node_Modules и обратно к FAS-Custom-Integration.ts
Файл в каталоге lib мы идем. Чтобы продирать файл для пользовательской интеграции значков, импортировать библиотеку и ранее рассеченные интерфейсы утилиты:
import { library, IconDefinition, IconLookup } from '@fortawesome/fontawesome-svg-core';
Поскольку реальный пример требует реального SVG для получения значений для нашего определения иконы от, SVG для логотипа Vercel ▲ приведен ниже (ранее Zeit).
Вы можете спросить себя: «Это тонко завуалированная попытка беззаботно продвигать вашу любимую платформу развертывания?»
Для тех, кто заинтересован в использовании метода, который производит последовательно отформатированные SVGS, сохраните фрагмент SVG выше в файле .svg. Тогда перейдите к Figma , введите рабочее пространство, и нажмите Ctrl + Shift + K (или CMND + Shift + K для пользователей MacOS там). Это открывает вашу локальную файловую систему, позволяющую импортировать SVG в виде изображения в рабочее пространство. Затем щелкните правой кнопкой мыши вновь добавленное изображение SVG, нажмите «Копировать» и выберите «Копировать как SVG». Вставьте скопированное содержимое в свой текстовый редактор и вуаля! SVG сверху рекится следующим образом:
С стандартизированным SVG, полученным через фигма, пусть начнется наклонение. Ваш пользовательский значок Const
должен напоминать следующее:
export const faCustomVercelIcon: IconDefinition & IconLookup = { prefix: 'fab', iconName: 'vercel-icon', icon: [ 24, 24, [], 'none', 'M24 22.525H0l12-21.05l12 21.05z' ] };
Теперь пропустите Facustomvercelicon
в библиотеку
library.add(faCustomVercelIcon);
Но подождите, ошибка Цлинта?! Не беспокоиться, это легко исправить. Перейдите к пакету @fortawesome в Node_Modules и открыть Fontawesome-Common-Tyms/index.d.ts
еще раз. Просто добавьте «Vercel-icon» в начало типа iconname.
export type IconName = 'vercel-icon' | '500px' | 'accessible-icon' | 'accusoft' | 'acquisitions-incorporated' | // ...
Хорошо выглядит, iconname сейчас 7 855 значков сильных. Пока мы здесь, давайте настроим один дополнительный тип ради ясности. В самом вершине файла index.d.ts добавьте «FAC» в тип ICONPREFIX:
export type IconPrefix = "fas" | "fab" | "fac" | "far" | "fal" | "fad";
Этот тип префикса обозначает пользовательские стилизованные иконки или покориемые, или все, что желает ваше сердце. Пока вы придерживаетесь факсимильной обозначения для IconPrefix, Fontawesome Happy Happy. С ошибкой Цлинта разрешена, обратно к FAS-Custom-Integration.ts
Файл в каталоге lib мы идем. Во-первых, обновите префикс на «FAC». Видеть? Библиотека более подавлена, чем можно в конце концов. Существует одна последняя модификация, чтобы сделать, но, к счастью, не связано с возвращением в Node_Modules в третий раз. Использование расширяется
Свойство Skyscripts Interfaces, файл должен напоминать следующее:
import { library, IconDefinition, IconLookup } from '@fortawesome/fontawesome-svg-core'; export interface CustomIconConstruct extends IconDefinition, IconLookup {} export const faCustomVercelIcon: CustomIconConstruct = { prefix: 'fac', iconName: 'vercel-icon', icon: [ 24, 24, [], 'none', 'M24 22.525H0l12-21.05l12 21.05z' ] }; library.add(faCustomVercelIcon);
Хотя лучшая практика определить все пользовательские значки в одном файле, Customiconconstruct
Интерфейс, который расширяет надежную уведомление и iconLookup, теперь может быть импортирован на протяжении всего вашего проекта, без необходимости проходить через Hastle для импорта двух интерфейсов утилиты еще раз. Итак, как это выглядит на практике?
Чтобы проверить свой пользовательский значок, откройте файл, который в конечном итоге отображает файл каталога страниц и импортировать следующее:
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCustomVercelIcon } from '../lib/fas-custom-integration';
Следующий фрагмент находится из проекта, который в настоящее время находится в конструкции, используя следующие, TyblicScript и Tailwindcss в качестве каркасов.
Если вы не знакомы с помощью Tailwindcs, не беспокойтесь о классное значение
встроенный стиль выше. Что сказал, отмечайте, как Facustomvercelicon
был получен как реквизит
Jsx.Element. Успех!
Для того, чтобы пользовательские значки для успешного развертывания Heroku или Vercel следующая команда должна выполняться в Git:
npx patch-package @fortawesome/fontawesome-common-types
Это генерирует патчи
Папка в вашем каталоге, которая содержит файл, изложенные локальные обновления, сделанные в целевой пакет. В нашем случае это библиотека, в которой мы добавили «Vercel-icon», чтобы ввести Iconname
и «FAC», чтобы ввести Iconprefix
Отказ Затем добавьте следующий скрипт PostInstall в Package.json:
{ "scripts": { "dev": "next", "build": "next build", "start": "next start", "postinstall": "npx patch-package" } }
Скрипт PostInstall сохраняет локальные изменения в Node_Modules, даже когда обновления версии пакета сделаны.
diff --git a/node_modules/@fortawesome/fontawesome-common-types/index.d.ts b/node_modules/@fortawesome/fontawesome-common-types/index.d.ts index b70b000..b6b2429 100644 --- a/node_modules/@fortawesome/fontawesome-common-types/index.d.ts +++ b/node_modules/@fortawesome/fontawesome-common-types/index.d.ts @@ -1,4 +1,4 @@ -export type IconPrefix = "fas" | "fab" | "far" | "fal" | "fad"; +export type IconPrefix = "fas" | "fab" | "fac" | "far" | "fal" | "fad"; export type IconPathData = string | string[] export interface IconLookup { @@ -21,7 +21,9 @@ export interface IconPack { [key: string]: IconDefinition; } -export type IconName = '500px' | +export type IconName = 'vercel-icon' | +'heroku-icon' | +'500px' | 'accessible-icon' | 'accusoft' | 'acquisitions-incorporated' |
Таким образом, этот процесс может быть выполнен с любым файлом SVG. Тем не менее, я рекомендую использовать FIGMA (или аналогичный инструмент) для стандартизации SVGS, прежде чем упреждает необходимые для определения необходимых битов, необходимых для определения пользовательских значков. Это завершает мой первый в мире технологический пост. Спасибо за следующее и не стесняйтесь отказаться от любых вопросов/комментариев/проблем в комментариях ниже. Счастливое кодирование!