Я пытаюсь использовать Webpack+PostCSS. Вот конфигурация CSS:
const cssRule = {
test: /\.css$/,
use: [
'style-loader',
{loader: 'css-loader'},
{
loader: 'postcss-loader',
options: {
plugins: [
postcssImport({
paths: ['./assets']
}),
postcssPresetEnv({
stage: 0,
browsers: 'Firefox ESR',
importFrom: ['./assets/shared/colors.css']
}),
postcssEasingGradients()
]
}
}
]
}
Файл assets/shared/colors.css выглядит так:
:root {
--color-primary-0: #051845;
--color-primary-1: #05112B;
--color-primary-2: #041335;
--color-primary-3: #092568;
--color-primary-4: #0A328D;
--color-primary-3-a20: #09256820;
--color-secondary-1-0: #200446;
--color-secondary-1-1: #16052C;
--color-secondary-1-2: #190336;
--color-secondary-1-3: #310769;
--color-secondary-1-4: #42098F;
--color-secondary-2-0: #004628;
--color-secondary-2-1: #012C1A;
--color-secondary-2-2: #00361F;
--color-secondary-2-3: #006A3D;
--color-secondary-2-4: #009153;
--light-gray: #EEE;
--dark-gray: #333;
}
Но когда я пытаюсь использовать эти цвета, инструменты разработчика Firefox жалуются, что переменные не установлены, а реальных цветов нигде не видно.
Что я делаю неправильно?
P. S. Я также пробовал аналогичную настройку с импортом Webpack css-loader, с точно такими же результатами...
🤔 А знаете ли вы, что...
CSS поддерживает разнообразные селекторы, которые позволяют выбирать элементы на веб-странице.
Update
Consider my later, simpler, more up-to-date answer: https://stackoverflow.com/a/67610503/11817077
What am I doing wrong?
Однозначного ответа может и не быть. Попробуйте эти.
О. Вы не экспорт переменных. Я предлагаю попробовать импортировать переменные, которые вы хотите использовать, а затем экспортировать переменные. «Зачем экспортировать то, что уже нужно импортировать?!» Я все еще спрашиваю себя об этом, но я добился прогресса, поверив в следующее предположение:
Based on my understanding, importing is for
postcss-preset-env
to apply static replacements and track where it cannot make a static replacement, while exporting is forpostcss-preset-env
to output variables that are necessary in the CSS for dynamic CSS behavior.
B. Установите postcss-preset-env
вариант preserve
на true
. При этом должен говорит плагинам включать «предварительно полифиллированный» CSS (например, отсутствующие переменные). У меня есть мнение против этого:
Based on my understanding, the
exportTo
option allowspostcss-preset-env
to "pre-polyfill" the CSS, in order to improve performance of bundled CSS, while thepreserve
-set-to-false
option provides all variables in the bundled CSS.
C. Оцените, имеет ли Webpack неожиданное поведение.Parcel 1.0 анализирует каждый файл CSS независимо при объединении. Без упаковщика (без Webpack, Parcel, Rollup и т. д.) я скомпилировал функциональный код, установив обеpreserve
в false
а такженет, используя exportTo
. См. раздел «Предупреждение».
Could anyone please explain how to use postcss-preset-env's importFrom?
Может быть. Кажется, вы правильно используете importFrom
. Но вы можете попробовать эти шаги для любого из приведенных выше ответов.
Ответ А
importFrom
переменные, которые вы хотите сделать доступными для postcss-preset-env
(пока он анализирует ваш CSS).exportTo
, где создать файл CSS, который вы хотите включить в свой окончательный CSS.Ответ Б
postcss-preset-env
preserve
на false
или true
.Ответ С
Вероятность успеха postcss-preset-env
, используя импортированные переменные и определяя переменные, необходимые для экспорта, зависит от:
формат из значения, переданный importFrom
и exportTo
формат из переменные, переданный importFrom
и exportTo
заказ, в котором передаются значения/переменные
тестовые примеры плагинов выполняет тестовый заказ нет из файлов; import
тестовое задание проверяет только один заказ из простых объектов с базовым использованием.
Детали заказа ускользают от меня. Могут потребоваться более сложные тестовые случаи.
Другой загрузчик, но тот же плагин.
postcss-preset-env
Проблема № 141: «Запутался в importFrom
и ожидаемом результате»postcss-preset-env
не охватывают примеры, показанные в документации.This is a newer, different, more up-to-date answer than my old one.
Убедитесь, что importFrom
установлено в параметрах конкретного функционального плагина, нет в параметрах postcssPresetEnv
.
См. csstools/postcss-preset-env#202 «Возможность экспорта пользовательских медиа, но не пользовательских свойств».