https://webpack.js.org/guides/dependency-management/
webpack предоставляет доступ к require.context
, который позволяет сообщать вебпаку, каким может / должен быть динамический путь, он устраняет неопределенность в отношении того, что требуется, и позволяет вам возвращать новое хешированное имя значка из его исходного имени. Он не требует от них всех затрат на импорт, он просто создает карту между старым и новым именем, если я правильно понял.
например, это означает, что нужно захватить все имена файлов в папке с иконками, взять те, которые начинаются с ic - так как это наша схема именования для значков, это создает объект во время сборки. Я считаю, что все возможные значки будут использоваться .
const ICONS = require.context('../../../assets/icons', true, /ic-[a-zA-Z0-9.-]/);
Возвращаемое значение - это функция, в которой вы можете передать исходное имя иконки и вернуть хешированную версию. Вы также можете использовать ICONS.keys()
, чтобы получить массив значков.
вот пример использования, который я использовал для предоставления некоторых значков.
const ICONS = require.context('../../../assets/icons', true, /ic-[a-zA-Z0-9.-]/);
export function getIconFromPath(path) {
return ICONS(path);
}
function getIconsFromPaths(obj) {
Object.keys(obj).forEach(key => Object.assign(obj, {[key]: ICONS(obj[key])}));
return obj;
}
export default getIconsFromPaths({
ARCHIVED: './ic-status-warning.svg',
CANCELLED: './ic-status-cancelled.svg',
CONFLICT: './ic-status-warning.svg',
DRAFT: './ic-status-draft.svg',
EARLIER: './ic-status-published.svg',
ENDED: './ic-status-ended.svg',
ERROR: './ic-status-published-failure.svg',
FAILURE: './ic-status-failure.svg',
INVALID: './ic-status-warning.svg',
IN_PROGRESS: './ic-content-publish-in-progress.svg',
LATEST: './ic-status-published-latest.svg',
LOCKED: './ic-status-locked.svg',
PUBLISHED: './ic-status-published.svg',
PUBLISHING: './ic-content-publish-in-progress.svg',
SCHEDULED: './ic-status-scheduled.svg',
SCHEDULING: './ic-content-publish-in-progress.svg',
UNLOCKED: './ic-status-unlocked.svg',
UPDATED: './ic-webhook-request-success.svg',
UNPUBLISHING: './ic-content-publish-in-progress.svg',
UNSCHEDULING: './ic-content-publish-in-progress.svg',
VALID: './ic-content-valid-tick.svg',
WARNING: './ic-status-warning.svg'
});
Поскольку веб-пакет теперь знает, что можно вернуть отсюда, он теперь может хэшировать имя, и вы можете выполнять любые полезные действия, такие как оптимизация во время сборки.
поэтому пример класса, приведенный в моем вопросе, будет решен с помощью
import { getIconFromPath } from '../icons/;
class Comp {
this.settingsLinks = [
{
name: 'advanced settings',
icon: getIconFromPath('./ic-settings.svg')
}
]
}