2013-03-25 7 views
37

Próbuję użyć yeoman, ale nie wiem, jak używać własnych plików sass.Co to jest workflow w Yeoman, aby pracować z plikami Sass?

Z

plików

grunt server

Sass są oglądane i kompilowane do

.tmp/styles/

Ale nie ma odniesienia do skompilowanego arkusza stylów, z wyjątkiem <link rel="stylesheet" href="styles/main.css">

Więc, co jest zalecany sposób użycia skompilowanych plików sass w ind ex.html podczas programowania?

E.g. grunt server, jeśli zmienię swój styl app/styles/my.sass na .tmp/styles/my.css, zostanie on zastąpiony i znajduje się poza serwerem (localhost: 9000). Dlatego nie można go połączyć w index.html.

Z grunt build jest wszystko w main.css obejmują my.sass ale w trakcie rozwoju nie wiem, jak korzystać z własnych plików Sass w index.html.

Czy możesz podać mi prosty przykład?

Jest to domyślna instalacja dla użytkowników. Zrobiłem to:

  1. yo angular test
  2. dodam app/styles/style.sass
  3. grunt server to skompilować style.sass do .tmp/styles/style.css
  4. teraz nie wiem jak to style.css go w html

(przepraszam może to jest głupie pytanie, ale jestem nowy także w chórze i chmielu)

To Gruntfile.js z Yeoman:

'use strict'; 
var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet; 
var mountFolder = function (connect, dir) { 
    return connect.static(require('path').resolve(dir)); 
}; 

module.exports = function (grunt) { 
    // load all grunt tasks 
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); 

    // configurable paths 
    var yeomanConfig = { 
    app: 'app', 
    dist: 'dist' 
    }; 

    try { 
    yeomanConfig.app = require('./component.json').appPath || yeomanConfig.app; 
    } catch (e) {} 

    grunt.initConfig({ 
    yeoman: yeomanConfig, 
    watch: { 
     coffee: { 
     files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'], 
     tasks: ['coffee:dist'] 
     }, 
     coffeeTest: { 
     files: ['test/spec/{,*/}*.coffee'], 
     tasks: ['coffee:test'] 
     }, 
     compass: { 
     files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], 
     tasks: ['compass'] 
     }, 
     livereload: { 
     files: [ 
      '<%= yeoman.app %>/{,*/}*.html', 
      '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css', 
      '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', 
      '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}' 
     ], 
     tasks: ['livereload'] 
     } 
    }, 
    connect: { 
     livereload: { 
     options: { 
      port: 9000, 
      // Change this to '0.0.0.0' to access the server from outside. 
      hostname: 'localhost', 
      middleware: function (connect) { 
      return [ 
       lrSnippet, 
       mountFolder(connect, '.tmp'), 
       mountFolder(connect, yeomanConfig.app) 
      ]; 
      } 
     } 
     }, 
     test: { 
     options: { 
      port: 9000, 
      middleware: function (connect) { 
      return [ 
       mountFolder(connect, '.tmp'), 
       mountFolder(connect, 'test') 
      ]; 
      } 
     } 
     } 
    }, 
    open: { 
     server: { 
     url: 'http://localhost:<%= connect.livereload.options.port %>' 
     } 
    }, 
    clean: { 
     dist: ['.tmp', '<%= yeoman.dist %>/*'], 
     server: '.tmp' 
    }, 
    jshint: { 
     options: { 
     jshintrc: '.jshintrc' 
     }, 
     all: [ 
     'Gruntfile.js', 
     '<%= yeoman.app %>/scripts/{,*/}*.js' 
     ] 
    }, 
    karma: { 
     unit: { 
     configFile: 'karma.conf.js', 
     singleRun: true 
     } 
    }, 
    coffee: { 
     dist: { 
     files: { 
      '.tmp/scripts/coffee.js': '<%= yeoman.app %>/scripts/*.coffee' 
     } 
     }, 
     test: { 
     files: [{ 
      expand: true, 
      cwd: '.tmp/spec', 
      src: '*.coffee', 
      dest: 'test/spec' 
     }] 
     } 
    }, 
    compass: { 
     options: { 
     sassDir: '<%= yeoman.app %>/styles', 
     cssDir: '.tmp/styles', 
     imagesDir: '<%= yeoman.app %>/images', 
     javascriptsDir: '<%= yeoman.app %>/scripts', 
     fontsDir: '<%= yeoman.app %>/styles/fonts', 
     importPath: '<%= yeoman.app %>/components', 
     relativeAssets: true 
     }, 
     dist: {}, 
     server: { 
     options: { 
      debugInfo: true 
     } 
     } 
    }, 
    concat: { 
     dist: { 
     files: { 
      '<%= yeoman.dist %>/scripts/scripts.js': [ 
      '.tmp/scripts/{,*/}*.js', 
      '<%= yeoman.app %>/scripts/{,*/}*.js' 
      ] 
     } 
     } 
    }, 
    useminPrepare: { 
     html: '<%= yeoman.app %>/index.html', 
     options: { 
     dest: '<%= yeoman.dist %>' 
     } 
    }, 
    usemin: { 
     html: ['<%= yeoman.dist %>/{,*/}*.html'], 
     css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], 
     options: { 
     dirs: ['<%= yeoman.dist %>'] 
     } 
    }, 
    imagemin: { 
     dist: { 
     files: [{ 
      expand: true, 
      cwd: '<%= yeoman.app %>/images', 
      src: '{,*/}*.{png,jpg,jpeg}', 
      dest: '<%= yeoman.dist %>/images' 
     }] 
     } 
    }, 
    cssmin: { 
     dist: { 
     files: { 
      '<%= yeoman.dist %>/styles/main.css': [ 
      '.tmp/styles/{,*/}*.css', 
      '<%= yeoman.app %>/styles/{,*/}*.css' 
      ] 
     } 
     } 
    }, 
    htmlmin: { 
     dist: { 
     options: { 
      /*removeCommentsFromCDATA: true, 
      // https://github.com/yeoman/grunt-usemin/issues/44 
      //collapseWhitespace: true, 
      collapseBooleanAttributes: true, 
      removeAttributeQuotes: true, 
      removeRedundantAttributes: true, 
      useShortDoctype: true, 
      removeEmptyAttributes: true, 
      removeOptionalTags: true*/ 
     }, 
     files: [{ 
      expand: true, 
      cwd: '<%= yeoman.app %>', 
      src: ['*.html', 'views/*.html'], 
      dest: '<%= yeoman.dist %>' 
     }] 
     } 
    }, 
    cdnify: { 
     dist: { 
     html: ['<%= yeoman.dist %>/*.html'] 
     } 
    }, 
    ngmin: { 
     dist: { 
     files: [{ 
      expand: true, 
      cwd: '<%= yeoman.dist %>/scripts', 
      src: '*.js', 
      dest: '<%= yeoman.dist %>/scripts' 
     }] 
     } 
    }, 
    uglify: { 
     dist: { 
     files: { 
      '<%= yeoman.dist %>/scripts/scripts.js': [ 
      '<%= yeoman.dist %>/scripts/scripts.js' 
      ], 
     } 
     } 
    }, 
    copy: { 
     dist: { 
     files: [{ 
      expand: true, 
      dot: true, 
      cwd: '<%= yeoman.app %>', 
      dest: '<%= yeoman.dist %>', 
      src: [ 
      '*.{ico,txt}', 
      '.htaccess', 
      'components/**/*', 
      'images/{,*/}*.{gif,webp}' 
      ] 
     }] 
     } 
    } 
    }); 

    grunt.renameTask('regarde', 'watch'); 
    // remove when mincss task is renamed 
    grunt.renameTask('mincss', 'cssmin'); 

    grunt.registerTask('server', [ 
    'clean:server', 
    'coffee:dist', 
    'compass:server', 
    'livereload-start', 
    'connect:livereload', 
    'open', 
    'watch' 
    ]); 

    grunt.registerTask('test', [ 
    'clean:server', 
    'coffee', 
    'compass', 
    'connect:test', 
    'karma' 
    ]); 

    grunt.registerTask('build', [ 
    'clean:dist', 
    'jshint', 
    'test', 
    'coffee', 
    'compass:dist', 
    'useminPrepare', 
    'imagemin', 
    'cssmin', 
    'htmlmin', 
    'concat', 
    'copy', 
    'cdnify', 
    'usemin', 
    'ngmin', 
    'uglify' 
    ]); 

    grunt.registerTask('default', ['build']); 
}; 
+0

Czy mogę zobaczyć Twój plik? –

+0

Dodałem odpowiedź poniżej – MarekLi

+0

Powinno być to w twoim pytaniu ;-) Odpowiedzi są tylko na Odpowiedzi na oryginalne pytanie, a nie na komentarze. –

Odpowiedz

14

Co szukasz jest udokumentowana na: https://github.com/yeoman/grunt-usemin

Wystarczy owinąć importu css w komentarzu bloku podobnie jak sposób to zrobić z plikami javascript

<!-- build:css styles/main.css --> 
<link rel="stylesheet" href="styles/base.css"> 
<link rel="stylesheet" href="styles/modules.css"> 
<link rel="stylesheet" href="styles/layout.css"> 
<!-- endbuild --> 

upewnić się, że generator jest gotowy do tej pory i wszystkie twoje zadania są ustawione.Jeden robi magię jest 'useminPrepare'

+0

dziękuję właśnie to szukałem – MarekLi

+0

Nie rozumiem dlaczego - useminPrepare zwykle nie jest wywoływane w zadaniu _serwer_. W produkcji (zadanie tworzenia) tak, ważne jest, aby to zrozumieć. – Andy

5

Wystarczy umieścić go jak

<link rel="stylesheet" href="styles/style.css"> 

Yeoman/grunt będzie wiedział, kiedy uruchomiony serwer, który powinien chwycić plik Sass z folderu temp .

+0

Nie domyślnie. Ale możesz dodać pomruk-zadanie, takie jak 'grunt-text-replace', który może być użyty do wyszukiwania/zamiany w plikach tekstowych. Ale dlaczego chcesz mieć różne pliki sass zawarte w pliku index.html w czasie programowania? – acme

+0

Nie chcę tego. Ale w domyślnym języku 'gruntowa konstrukcja' scal wszystkie pliki * css i * .sass z' app/style' do 'dist/styles/main.css', więc po' gruntowej budowie' są inne niepotrzebne pliki css i sass z wyjątkiem 'main. css'. Może nie rozumiem, w jaki sposób zbudowano proces budowania ziemi, ponieważ jeśli potrzebna jest "chrzcielna zamiana tekstu", twórcy IMHO używają go podczas "budowy gruntu". To było moje pytanie powyżej, innymi słowy: Jako, że wyrocznia miała używać moich własnych plików, sass? – MarekLi

6

Rzeczywista magia dla rozwoju dzieje się w

mountFolder(connect, '.tmp'), 

dla connect-livereload middleware dla grunt-contrib-watch.

To sprawia, że ​​lokalny serwer służyć również zawartość folderu .tmp, dlatego można odwoływać style/main.css i dostać .tmp/style/main.css w zamian.

useminPrepare zwykle nie zadzwonił na serwerze zadania.

+1

Nice! Rozumiem przebieg pracy z Twojej odpowiedzi. '' livereload { opcje: { otwarty: prawda skład: [ 'tmp' '<% = yeoman.app%>' ] } } '' – rahmat