2015-10-06 2 views
13

Я пытаюсь выяснить рабочий процесс с участием postcss. Мне нужно иметь частичные части css в одной папке, смотреть их и выводить файл css-пакета. Файл css пакета должен содержать файл base.css вверху.Смотрите несколько файлов css с postcss и выведите файл bundle.css

postcss имеет флаг -watch и может просматривать несколько файлов, но может выводить только несколько файлов, а не файл css-пакета. Я могу использовать cat, чтобы объединить все файлы и использовать stdin для их отправки в postcss. Но я не могу запустить команду cat из postcss.

Мои файлы структура может выглядеть следующим образом:

partials/ 
    |_one.css 
    |_two.css 
styles/ 
    |_base.css 
    |_bundle.css 

Как бы я, используя НПМ, организовать мой раздел сценария для использования интерфейса командной строки для достижения своей цели?

Моя основная проблема заключается в том, чтобы выяснить, как оркестровать шаги сборки без одного шага, блокирующего следующий. Ссылка на рабочий рабочий пример будет отличной!

EDIT У меня есть решение, но оно очень субоптимально, поскольку оно не может использоваться с исходными кодами, не может иметь глобальных переменных и является двухэтапным процессом. Но я опишу его здесь в надежде, что кто-то может предложить лучший подход.

Используя следующую структуру:

build/ 
    |_stylesheet/ 
     |_default.css (final processed css) 
partials/ 
    |_one.css 
    |_one.htm (html snippet example) 
    |_two.css 
    |_two.htm (html snippet example) 
styles/ 
    |_base.css 
    |_bundle/ (css files from partial/ that is partly processed) 
     |_one.css 
     |_two.css 
    |_master.css (import rules) 

У меня есть два этапа в моей package.json. Сначала я убеждаюсь, что у меня есть папка стилей/пакетов (mkdir -p), а затем я начинаю nodemon, чтобы посмотреть файлы css в partials /. Когда происходит изменение, nodemon запускает npm run css:build.

css:build обрабатывает файлы css в partials/и выводит их в стилях/комплекте/(помните, что я не знаю, как смотреть несколько файлов и выводить один связанный файл).

После запуска css:build npm запускает postcss:build, который обрабатывает файл master.css, который @import css-файлы из styles/bundle /. Затем я вывожу (>) обработанный контент из stdout для сборки/stylesheet/default.css.

{ 
    "css": "mkdir -p styles/bundle && nodemon -I --ext css --watch partials/ --exec 'npm run css:build'", 
    "css:build": "postcss --use lost --use postcss-cssnext --dir styles/bundle/ partials/*.css", 
    "postcss:build": "postcss --use postcss-import --use postcss-cssnext --use cssnano styles/master.css > build/stylesheet/default.css", 
} 
+0

Вы можете проверить [Gulp] (http://gulpjs.com/) с помощью модуля [gulp-concat] (https://www.npmjs.com/package/gulp-concat). Существует также модуль [gulp-postcss] (https://github.com/postcss/gulp-postcss), хотя я сам его не использовал. – Wouter

+0

Я хочу избежать использования Gulp или Grunt. Я работал с обоими и убежден, что я могу добиться более продолжительного потока работы с помощью ** npm ** и инструментов ОС. Но я довольно новичок в этом подходе и не знаю * лучшей практики * для прослушивания и запуска команд. – dotnetCarpenter

+0

как об использовании чего-то вроде этого ?: '" css: build ":" cat partials/*. Css | postcss -u lost -u postcss-cssnext | cat styles/_base.css -> default.css ". Сделаем это за один шаг. Но вы не получите исходные карты, так как 'postcss-cli' не имеет возможности для исходных карт. – hassansin

ответ

3

Вы можете проверить watch и parallelshell пакеты от НПМ. Я считаю, что комбо этих двух будет делать трюк. Подробнее об этом здесь: http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/

+0

Хорошо работает с пакет 'watch', заданный сценарий под названием' 'css: build '', который выполняет фактическую работу: '' watch ":" watch' npm run css: build 'css "' – Stoffe

3

Возможно, вам стоит использовать webpack вместо этого, чтобы создать один файл css и другие ресурсы, которые также имеют флаг часов. Это очень эффективно, и вам не нужно вручную перестраивать все время после изменений в ресурсах/файлах.