2016-05-02 2 views
2

Попытка понять наилучшую практику структурирования моего проекта подчеркивания подчеркивания.SASS - вывод отдельных таблиц стилей для шаблонов страниц

У меня есть базовая рабочая среда, использующая npm и grunt, и скомпилируйте мой основной css, но я хочу создать несколько шаблонов страниц в подпапке и вывести их соответствующий .scss-файл в папку/layout, чтобы что я могу епдиеий отдельные таблицы стилей шаблона страницы как .css после основной таблицы стилей в function.php

я структурирован мои файлы проект примерно в такой последовательности: // обновляется //

.gitignore 
404.php 
archive.php 
comments.php 
/compiled 
    style-human.css // Readable CSS Before prefixing // 
    style.css // Minified CSS Before Prefixing // 
    /page-layouts 
     page-frontage.human.css // Readable page-template CSS before prefixing // 
     page-frontage.css // minified page-template CSS before prefixing // 
/fonts 
footer.php 
functions.php 
gruntfile.js 
header.php 
/inc 
index.php 
/js 
/languages 
/node_modules 
package.json 
/page-layouts 
    page-frontage.css // prefixed minified CSS to be Enqueued after main style.css in functions.php // 
    page-frontage-human.css // prefixed readable CSS // 
/page-templates 
    page-frontpage.php 

page.php 
rtl.css 
/sass 
    _normalize.scss 
    /elements 
    /forms 
    /layout 
     _footer 
     _header 
     /page-layouts 
      _page-frontpage.scss 
    /media 
    /mixins 
    /modules 
    /navigation 
    /site 
    style.css // @imports everything SCSS except page-layouts // 
    /variables-site 
search.php 
sidebar.php 
single.php 
style-human.css // readable main stylesheet // 
style.css // minified main stylesheet Enqueued in functions.php // 
/template-parts  

Это код я использовал в своем файле gruntfile.js

module.exports = function(grunt){ 

    grunt.initConfig({ 

     pkg: grunt.file.readJSON('package.json'), 

     /** 
     * sass task 
     */ 
     sass: { 
      dev: { 
       options: { 
        style: 'expanded', 
        sourcemap: 'none', 
       }, 
       files: { 
       'compiled/style-human.css': 'sass/style.scss' 
       } 
     }, 
     dist: { 
       options: { 
        style: 'compressed', 
        sourcemap: 'none', 
       }, 
       files: { 
       'compiled/style.css': 'sass/style.scss' 
       } 
      } 
     }, 

     /** 
     * Autoprefixer 
     */ 
     autoprefixer: { 
      options: { 
      browsers: ['last 2 versions'] 
      }, 
      // prefix all files // 
      multiple_files: { 
      expand: true, 
       flatten: true, 
       src: 'compiled/*.css', 
       dest: '' 
      } 
     }, 

     /** 
     * Watch task 
     */ 
     watch: { 
      css: { 
       files: '**/*scss', 
       tasks: ['sass','autoprefixer']  
     } 
    } 

    }); 
    grunt.loadNpmTasks ('grunt-contrib-sass'); 
    grunt.loadNpmTasks ('grunt-contrib-watch'); 
    grunt.loadNpmTasks ('grunt-autoprefixer'); 
    grunt.registerTask('default',['watch']); 
} 

Теперь я попробовал пару различных решений, но я нигде не понимаю, как я должен структурировать свой файл gruntfile.js, чтобы он выводил мои две страницы-шаблоны scss в качестве автоматической префикса css в папке макета.

+0

Доменился ли ваш реальный код? – sab

+0

Прямо сейчас он принимает мой style.scss и компилирует его в обычный человекообразный стиль human.css и миниатюрный стиль.css и помещает их в/скомпилированную папку, а затем запускает autoprefixer в этих файлах и помещает их в корневой каталог моего файла темы. –

+0

Я в основном хочу, чтобы он продолжал это делать, а также забирал файлы scss-файла/шаблона страницы и повторял процедуру, которая компилирует и префикс этих файлов и в конце ставит их в папку шаблонов/страниц, чтобы я мог их выложить в очередь после моего main main.css в functions.php –

ответ

0

Для чего я вижу, ваша задача по умолчанию запускает задачу просмотра, которая только запускает задачу sass и autoprefixer, если обновляется scss-файл.

Вы должны использовать:

grunt.registerTask('default',['sass','autoprefixer']); 

На практике, мы не размещаем задачу часов в задачу по умолчанию, потому что остановить поток. Вместо этого мы вызываем задачу просмотра, как только сервер запускается. (Используйте команду grunt watch в терминале на том же уровне вашего gruntfile)

+0

Я не уверен, что я за тобой? Я хочу, чтобы задача часов выполнялась и следила за обновлениями .scss, когда я запускал grunt, и, поскольку он встал до сегодняшнего дня, когда действительно начал возиться с моим Gruntfile.js, он сделал то, что я хотел, что было, когда-нибудь я что-то изменил в своем scss-файлы, он обновлял и автоматически фиксировал две таблицы стилей, style-human.css и style.css. Какая разница с вашим предложением? –

1

Рода удалось найти приемлемое решение, вероятно, не самый элегантный один, но он работает, вроде ...

I структурированы мои файлы, как это:

.gitignore 
404.php 
archive.php 
comments.php 
/compiled 
    style-human.css //-- Readable CSS Before prefixing --// 
    style.css //-- Minified CSS Before Prefixing --// 
    /page-layouts 
     frontage.human.css //-- Readable page-template CSS before prefixing --// 
     frontage.css //-- minified page-template CSS before prefixing --// 
/fonts 
footer.php 
functions.php 
gruntfile.js 
header.php 
/inc 
index.php 
/js 
/languages 
/node_modules 
package.json 
/page-layouts 
    frontage.css //-- prefixed minified CSS to be Enqueued after main style.css in functions.php --// 
    frontage-human.css //-- prefixed readable CSS --// 
/page-templates 
    frontage.php //-- code for template goes here, Enqueued in functions.php --// 
page.php 
rtl.css 
/sass 
    _normalize.scss 
    /elements 
    /forms 
    /layout 
     _footer 
     _header 
     /page-layouts //-- working folder for all page templates --// 
      _frontpage.scss //-- SASS for page template goes here! --// 
    /media 
    /mixins 
    /modules 
    /navigation 
    /page-templates 
     frontpage.scss //-- @imports content of ../layout/page-layouts/_frontpage.scss --// 
    /site 
    style.css //-- @imports everything SCSS except /page-layouts --// 
    /variables-site 
search.php 
sidebar.php 
single.php 
style-human.css //-- readable main stylesheet --// 
style.css //-- minified main stylesheet Enqueued in functions.php --// 
/template-parts  

И я структурирован мой Gruntfile.js следующего

module.exports = function(grunt){ 

    grunt.initConfig({ 

     pkg: grunt.file.readJSON('package.json'), 

     /** 
     * sass task 
     */ 
     sass: {    // Task 
      dev: {    // Target 
       options: {  // Target options 
        style: 'expanded', 
        sourcemap: 'none', 
       }, 
       files: {  // Dictionary of files 
       'compiled/style-human.css': 'sass/style.scss', // 'destination': 'source' 
        'compiled/page-layouts/frontpage-human.css': 'sass/page-templates/frontpage.scss' // 'destination': 'source' 
       } 
     }, 
     dist: {    // Target 
       options: { // Target options 
        style: 'compressed', 
        sourcemap: 'none', 
       }, 
       files: {  // Dictionary of files 
       'compiled/style.css': 'sass/style.scss', // 'destination': 'source' 
        'compiled/page-layouts/frontpage.css': 'sass/page-templates/frontpage.scss' // 'destination': 'source' 

       } 
      } 
     }, // close sass task 

     /** 
     * Autoprefixer 
     */ 
     autoprefixer: { 
      options: { 
      browsers: ['last 2 versions'] 
      }, 
      // prefix all files // 
      multiple_files: { 
      expand: true, 
       flatten: true, 
       src: 'compiled/*.css', 
       dest: '' 
      }, 
      // prefix frontpage template // 
      multiple_files: { 
      expand: true, 
       flatten: true, 
       src: 'compiled/page-layouts/*.css', 
       dest: './page-layouts' 
      }, 
     }, 

     /** 
     * Watch task 
     */ 
     watch: { 
      css: { 
       files: '**/*scss', 
       tasks: ['sass','autoprefixer']  
     } 
    } 

    }); 
    grunt.loadNpmTasks ('grunt-contrib-sass'); 
    grunt.loadNpmTasks ('grunt-contrib-watch'); 
    grunt.loadNpmTasks ('grunt-autoprefixer'); 
    grunt.registerTask('default',['watch']); 
} 

в основном это работает, как я предназначил для, ра шаблоны стилей ge-шаблонов сохраняются в виде правдоподобных/минитипированных версий с автоматическим преобразованием в предполагаемой папке с макетами страниц, поэтому я могу их выдать после основного стиля. css в functions.php

Только одна «маленькая» проблема оставлена ​​на работу вне, мои страницы scss-шаблонов страниц не понимают переменные ...

+0

Поставил это для работы в соответствии с назначением.Проблема заключалась в том, что i @ imported файлы в неправильном порядке в моем файле frontage.scss, конечно, мне нужно сначала импортировать переменные-site.scss и mix-site.scss, прежде чем я импортирую свой файл шаблона страницы, используя переменные и mixins. .. –

Смежные вопросы