Использование postcss в узле для изменения строки CSS

У меня есть строка JavaScript css:

let style = '' +
  'body {display: flex;} ' +
  'body {background: red;}' +
  '#id5 {color: blue;}' +
  '$id7 {color: green;}' +
  '#id5 {color: yellow;}';

Я пытаюсь импортировать postcss в свой проект, чтобы я мог использовать комбинированные дубликаты селекторов: https://www.npmjs.com/package/postcss-combine-duplicated-selectors

const postcss = require('postcss-js');
const postcsscombine = require('postcss-combine-duplicated-selectors');

let combiner = postcss.sync([ postcsscombine ]);
let newStyle = combiner(style);

console.log(newStyle);

Желаемый результат будет примерно таким:

'body {display: flex; background: red;} #id5 {color: yellow} #id7 {color: green;}'

Фактический вывод

{ '0': 'b',
  '1': 'o',
  '2': 'd',
  '3': 'y',
  '4': ' ',
  '5': '{',
  '6': 'd',
  ...
  '100': 'l',
  '101': 'o',
  '102': 'w',
  '103': ';',
  '104': '}' }

Похоже, что postcss обрабатывает входящие объекты стиля, а не строки. Есть ли способ исправить это, чтобы получить желаемый результат?

1 ответ

Если вы хотите использовать PostCSS для работы со строкой CSS, просто сделайте следующее:

const postcss = require('postcss');
const postcsscombine = require('postcss-combine-duplicated-selectors');

let style = 'body {display: flex;}, body {background: red;}, #id5 {color: blue;}, $id7 {color: green;}, #id5 {color: yellow;}';

postcss([postcsscombine])
  .process(style , {from: 'undefined'})
  .then(result => {
    console.log(result.css);
  });

Вам нужно установить from Свойство объекта параметров процесса 'неопределенное'. Кроме того, некоторые плагины являются асинхронными, поэтому лучше использовать интерфейс обещаний.

Другие вопросы по тегам