Я создал собственный скрипт Node, который выполняет всю обработку SCSS вручную в JS, а не через командную строку или с помощью веб-пакета.
Процесс выглядит следующим образом:
- Следите за изменениями в файлах .scss.
- При изменении скомпилируйте SCSS в CSS с помощью
node-sass
и одновременно создайте исходную карту с помощьюnode-sass
. - Запишите файлы
screen.css
иscreen.css.map
, используя `fs.writeFile() - Для файла
screen.css
я затем перечитал его с помощьюfs.readFile
, чтобы получить буфер, и пропустил содержимое CSS черезpostcss
, используя плагинautoprefixer
для автопрефикса всего CSS. Затем я снова переписываю это, используяfs.writeFile
, и, наконец, загружаю на сервер, используяjsftp
. При этом процесс для файлаscreen.css.map
точно такой же, за исключением того, что я не прогоняю его черезpostcss
, а просто перечитываю и заливаю на сервер после первоначального написания.
Моя проблема
Если я включу плагин autoprefixer
при использовании postcss
, например:
postcss([autoprefixer]).process(buffer, {
from: "assets/css/screen.css",
to: "assets/css/screen.css"
}).then(result => {...})
исходная карта совершенно неверна при проверке в браузере и указывает не только на неправильные строки, но и на неправильные файлы.
Например, SCSS для баннера страницы находится в _banner.scss
, но исходная карта говорит мне, что все это в _calendar.scss
.
Однако, если я оставлю весь код таким же, но оставлю autoprefixer
, например:
postcss([]).process(buffer, {
from: "assets/css/screen.css",
to: "assets/css/screen.css"
}).then(result => {...})
Исходная карта работает отлично, правильно указывая мне на _banner.scss
для всех стилей баннеров.
Кто-нибудь знает, как я могу исправить это и заставить мои исходные карты SCSS работать, все еще используя автопрефиксер?
Ссылка на полный исходный код скрипта узла обработки SCSS здесь, игнорируйте ужасную вложенность, это всего лишь ранняя версия :) https://github.com/JJGerrish/twk-boilerplate/blob/master/template/style.js