Twitter bootstrap 运行“grunt service”会忽略sass导入

Twitter bootstrap 运行“grunt service”会忽略sass导入,twitter-bootstrap,gruntjs,jekyll,yeoman,compass-sass,Twitter Bootstrap,Gruntjs,Jekyll,Yeoman,Compass Sass,背景信息: 我目前正在探索使用生成一个Jekyll网站使用。我用它来帮助把所有的事情都整合起来。的文档包含有关我的基本设置的详细信息 问题 目前,我正在尝试使用Bootstrap,这是我使用Bower安装的。我的main.scss文件如下所示: @import 'bootstrap-sass-official/assets/stylesheets/bootstrap'; @import 'custom/reset'; $icon-font-path: "/_bower_components/b

背景信息:

我目前正在探索使用生成一个Jekyll网站使用。我用它来帮助把所有的事情都整合起来。的文档包含有关我的基本设置的详细信息

问题

目前,我正在尝试使用Bootstrap,这是我使用Bower安装的。我的
main.scss
文件如下所示:

@import 'bootstrap-sass-official/assets/stylesheets/bootstrap';
@import 'custom/reset';
$icon-font-path: "/_bower_components/bootstrap-sass-official/assets/fonts/bootstrap/";

// bower:scss
@import "../../_bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap.scss";
// endbower 

@import 'custom/reset';
当我运行
grunt build
时,一切正常——grunt编译引导文件和我自己的自定义重置/sass文件

但是,当我运行
grunt-service
时,grunt最初似乎完全忽略了引导文件。它成功地编译了我的自定义样式,但完全忽略了引导

我尝试过的

我确实找到了一个解决办法:如果我对
main.scss
做任何更改(即使是添加空格这样的小改动),Grunt将正确编译引导和我的样式。然而,这是非常烦人的,我更愿意从一开始就让一切正常工作

我已尝试删除
.jekyll
.sass缓存
.tmp
dist
文件夹,以防某些缓存处于损坏状态,但这样做没有任何效果

此时,我怀疑问题出在我的
Gruntfile.js
文件上。Grunt在服务和构建时执行的任务是相当不同的,所以我想知道这个问题是否是由我在一个任务中执行的某些任务而不是另一个任务引起的

不幸的是,我以前从未使用过Yeoman或Grunt,因此我似乎无法准确确定问题是什么或如何解决

我的代码

这是我的Grunfile文件:

// Generated on 2014-07-08 using generator-jekyllrb 1.2.1
'use strict';

// Directory reference:
//   css: _assets/css
//   compass: _assets/scss
//   javascript: _assets/javascript
//   images: _assets/media
//   fonts: _assets/fonts

module.exports = function (grunt) {
  // Show elapsed time after tasks run
  require('time-grunt')(grunt);
  // Load all Grunt tasks
  require('load-grunt-tasks')(grunt);

  grunt.initConfig({
    // Configurable paths
    yeoman: {
      app: 'app',
      dist: 'dist'
    },
    watch: {
      compass: {
        files: [
            '<%= yeoman.app %>/_assets/scss/**/*.{scss,sass}',
            '<%= yeoman.app %>/_bower_components/bootstrap-sass-official/assets/stylesheets/*.{scss,sass}'],
        tasks: ['compass:server', 'autoprefixer:server']
      },
      autoprefixer: {
        files: ['<%= yeoman.app %>/_assets/css/**/*.css'],
        tasks: ['copy:stageCss', 'autoprefixer:server']
      },
      jekyll: {
        files: [
          '<%= yeoman.app %>/**/*.{html,yml,md,mkd,markdown}',
          '!<%= yeoman.app %>/_bower_components/**/*'
        ],
        tasks: ['jekyll:server']
      },
      livereload: {
        options: {
          livereload: '<%= connect.options.livereload %>'
        },
        files: [
          '.jekyll/**/*.html',
          '.tmp/_assets/css/**/*.css',
          '{.tmp,<%= yeoman.app %>}/<%= js %>/**/*.js',
          '<%= yeoman.app %>/_assets/media/**/*.{gif,jpg,jpeg,png,svg,webp}'
        ]
      }
    },
    connect: {
      options: {
        port: 9000,
        livereload: 35729,
        // change this to '0.0.0.0' to access the server from outside
        hostname: 'localhost'
      },
      livereload: {
        options: {
          open: true,
          base: [
            '.tmp',
            '.jekyll',
            '<%= yeoman.app %>'
          ]
        }
      },
      dist: {
        options: {
          open: true,
          base: [
            '<%= yeoman.dist %>'
          ]
        }
      },
      test: {
        options: {
          base: [
            '.tmp',
            '.jekyll',
            'test',
            '<%= yeoman.app %>'
          ]
        }
      }
    },
    clean: {
      dist: {
        files: [{
          dot: true,
          src: [
            '<%= yeoman.dist %>/*',
            // Running Jekyll also cleans the target directory.  Exclude any
            // non-standard `keep_files` here (e.g., the generated files
            // directory from Jekyll Picture Tag).
            '!<%= yeoman.dist %>/.git*'
          ]
        }]
      },
      server: [
        '.tmp',
        '.jekyll'
      ]
    },
    compass: {
      options: {
        // If you're using global Sass gems, require them here.
        // require: ['singularity', 'jacket'],
        bundleExec: true,
        sassDir: '<%= yeoman.app %>/_assets/scss',
        cssDir: '.tmp/_assets/css',
        imagesDir: '<%= yeoman.app %>/_assets/media',
        javascriptsDir: '<%= yeoman.app %>/_assets/javascript',
        importPath: '<%= yeoman.app %>/_bower_components',
        relativeAssets: false,
        httpImagesPath: '/_assets/media',
        httpGeneratedImagesPath: '/_assets/media/generated',
        outputStyle: 'expanded',
        raw: 'extensions_dir = "<%= yeoman.app %>/_bower_components"\n'
      },
      dist: {
        options: {
          generatedImagesDir: '<%= yeoman.dist %>/_assets/media/generated'
        }
      },
      server: {
        options: {
          debugInfo: true,
          generatedImagesDir: '.tmp/_assets/media/generated'
        }
      }
    },
    autoprefixer: {
      options: {
        browsers: ['last 2 versions']
      },
      dist: {
        files: [{
          expand: true,
          cwd: '<%= yeoman.dist %>/_assets/css',
          src: '**/*.css',
          dest: '<%= yeoman.dist %>/_assets/css'
        }]
      },
      server: {
        files: [{
          expand: true,
          cwd: '.tmp/_assets/css',
          src: '**/*.css',
          dest: '.tmp/_assets/css'
        }]
      }
    },
    jekyll: {
      options: {
        bundleExec: true,
        config: '_config.yml,_config.build.yml',
        src: '<%= yeoman.app %>'
      },
      dist: {
        options: {
          dest: '<%= yeoman.dist %>',
        }
      },
      server: {
        options: {
          config: '_config.yml',
          dest: '.jekyll'
        }
      },
      check: {
        options: {
          doctor: true
        }
      }
    },
    useminPrepare: {
      options: {
        dest: '<%= yeoman.dist %>'
      },
      html: '<%= yeoman.dist %>/index.html'
    },
    usemin: {
      options: {
        assetsDirs: '<%= yeoman.dist %>',
      },
      html: ['<%= yeoman.dist %>/**/*.html'],
      css: ['<%= yeoman.dist %>/_assets/css/**/*.css']
    },
    htmlmin: {
      dist: {
        options: {
          collapseWhitespace: true,
          collapseBooleanAttributes: true,
          removeAttributeQuotes: true,
          removeRedundantAttributes: true
        },
        files: [{
          expand: true,
          cwd: '<%= yeoman.dist %>',
          src: '**/*.html',
          dest: '<%= yeoman.dist %>'
        }]
      }
    },
    // Usemin adds files to concat
    concat: {},
    // Usemin adds files to uglify
    uglify: {},
    // Usemin adds files to cssmin
    cssmin: {
      dist: {
        options: {
          check: 'gzip'
        }
      }
    },
    imagemin: {
      dist: {
        options: {
          progressive: true
        },
        files: [{
          expand: true,
          cwd: '<%= yeoman.dist %>',
          src: '**/*.{jpg,jpeg,png}',
          dest: '<%= yeoman.dist %>'
        }]
      }
    },
    svgmin: {
      dist: {
        files: [{
          expand: true,
          cwd: '<%= yeoman.dist %>',
          src: '**/*.svg',
          dest: '<%= yeoman.dist %>'
        }]
      }
    },
    copy: {
      dist: {
        files: [
          {
            expand: true,
            dot: true,
            cwd: '<%= yeoman.app %>',
            src: [
              // Jekyll processes and moves HTML and text files.
              // Usemin moves CSS and javascript inside of Usemin blocks.
              // Copy moves asset files and directories.
              '_assets/media/**/*',
              '_assets/fonts/**/*',
              // Like Jekyll, exclude files & folders prefixed with an underscore.
              '!**/_*{,/**}',
              // Explicitly add any files your site needs for distribution here.
              //'_bower_components/jquery/jquery.js',
              //'favicon.ico',
              //'apple-touch*.png'
            ],
            dest: '<%= yeoman.dist %>'
          },
          {
            expand: true,
            flatten: true,
            dot: true,
            cwd: '<%= yeoman.app %>',
            src: [
              '_bower_components/bootstrap-sass-official/assets/fonts/**/*'
            ],
            dest: '<%= yeoman.dist %>/_assets/css/bootstrap'
          }
        ]
      },
      // Copy CSS into .tmp directory for Autoprefixer processing
      stageCss: {
        files: [
          {
            expand: true,
            dot: true,
            cwd: '<%= yeoman.app %>/_assets/css',
            src: '**/*.css',
            dest: '.tmp/_assets/css'
          },
          {
            expand: true,
            flatten: true,
            dot: true,
            cwd: '<%= yeoman.app %>',
            src: [
              '_bower_components/bootstrap-sass-official/assets/fonts/**/*'
            ],
            dest: '.tmp/_assets/css/bootstrap'
          }
        ]
      }
    },
    filerev: {
      options: {
        length: 4
      },
      dist: {
        files: [{
          src: [
            '<%= yeoman.dist %>/_assets/javascript/**/*.js',
            '<%= yeoman.dist %>/_assets/css/**/*.css',
            '<%= yeoman.dist %>/_assets/media/**/*.{gif,jpg,jpeg,png,svg,webp}',
            '<%= yeoman.dist %>/_assets/fonts/**/*.{eot*,otf,svg,ttf,woff}'
          ]
        }]
      }
    },
    buildcontrol: {
      dist: {
        options: {
          remote: '../',
          branch: 'gh-pages',
          commit: true,
          push: true
        }
      }
    },
    jshint: {
      options: {
        jshintrc: '.jshintrc',
        reporter: require('jshint-stylish')
      },
      all: [
        'Gruntfile.js',
        '<%= yeoman.app %>/_assets/javascript/**/*.js',
        'test/spec/**/*.js'
      ]
    },
    csslint: {
      options: {
        csslintrc: '.csslintrc'
      },
      check: {
        src: [
          '<%= yeoman.app %>/_assets/css/**/*.css',
          '<%= yeoman.app %>/_assets/scss/**/*.scss'
        ]
      }
    },
    concurrent: {
      server: [
        'compass:server',
        'copy:stageCss',
        'jekyll:server'
      ],
      dist: [
        'compass:dist',
        'copy:dist'
      ]
    }
  });

  // Define Tasks
  grunt.registerTask('serve', function (target) {
    if (target === 'dist') {
      return grunt.task.run(['build', 'connect:dist:keepalive']);
    }

    grunt.task.run([
      'clean:server',
      'concurrent:server',
      'autoprefixer:server',
      'connect:livereload',
      'watch'
    ]);
  });

  grunt.registerTask('server', function () {
    grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
    grunt.task.run(['serve']);
  });

  // No real tests yet. Add your own.
  grunt.registerTask('test', [
  //   'clean:server',
  //   'concurrent:test',
  //   'connect:test'
  ]);

  grunt.registerTask('check', [
    'clean:server',
    'jekyll:check',
    'compass:server',
    'jshint:all',
    'csslint:check'
  ]);

  grunt.registerTask('build', [
    'clean',
    // Jekyll cleans files from the target directory, so must run first
    'jekyll:dist',
    'concurrent:dist',
    'useminPrepare',
    'concat',
    'autoprefixer:dist',
    'cssmin',
    'uglify',
    'imagemin',
    'svgmin',
    'filerev',
    'usemin',
    'htmlmin'
    ]);

  grunt.registerTask('deploy', [
    'check',
    'test',
    'build',
    'buildcontrol'
    ]);

  grunt.registerTask('default', [
    'check',
    'test',
    'build'
  ]);
};
然后,您可以通过运行以下命令来复制该行为:

grunt serve
Grunt应该在
localhost:9000
上提供默认的Jekyll页面。我已经在页面中添加了两个按钮,都使用了Bootstrap中的样式。如果引导正在工作,左按钮将是蓝色的,而右按钮将有一个星形图标在里面。目前,没有应用引导样式,按钮是普通的


我目前正在使用Windows 8.1、Ruby版本1.9.3p545、Node.js版本0.10.26、grunt版本0.4.5和grunt cli版本0.1.13。

在您的Jekyll config.yml文件中,是否设置了:

sass:
    sass_dir: root-path-of-your-imported-files-folder
如果你有这个结构

-root/
  -css/
    -main.scss
    -bootstrap-sass-official/
        -base.scss
        -...
    -custom/
        -reset.scss
        -...

您的sass\u dircss/

嗯,我已经设法解决了我的问题,尽管我不完全确定如何解决

以下是我所做的主要更改:

  • 将我的项目和Grunfile修改为使用wiredep,我基本上是从generator创建的项目和Grunfile复制的
  • 将我的
    main.css
    文件修改为如下所示:

    @import 'bootstrap-sass-official/assets/stylesheets/bootstrap';
    @import 'custom/reset';
    
    $icon-font-path: "/_bower_components/bootstrap-sass-official/assets/fonts/bootstrap/";
    
    // bower:scss
    @import "../../_bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap.scss";
    // endbower 
    
    @import 'custom/reset';
    
  • 在提供文件时调用了
    copy:dist
    任务,而不是
    copy:stageCss

  • 我不完全确定到底是什么修复了它——我只知道#3肯定是一个因素,但也肯定不是唯一的因素。在我申请变更3之前,一切都不起作用,但在新回购协议上单独申请变更3不会导致任何变化

    您可以在此处看到完整的差异:

    这是我最后的Gruntfile,供参考:

    // Generated on 2014-07-08 using generator-jekyllrb 1.2.1
    'use strict';
    
    // Directory reference:
    //   css: _assets/css
    //   compass: _assets/scss
    //   javascript: _assets/javascript
    //   images: _assets/media
    //   fonts: _assets/fonts
    
    module.exports = function (grunt) {
      // Show elapsed time after tasks run
      require('time-grunt')(grunt);
      // Load all Grunt tasks
      require('load-grunt-tasks')(grunt);
    
      grunt.initConfig({
        // Configurable paths
        yeoman: {
          app: 'app',
          dist: 'dist'
        },
        watch: {
          bower: {
            files: ['bower.json'],
            tasks: ['wiredep']
          },
          compass: {
            files: [
                '<%= yeoman.app %>/_assets/scss/**/*.{scss,sass}',
                '<%= yeoman.app %>/_bower_components/bootstrap-sass-official/assets/stylesheets/*.{scss,sass}'],
            tasks: ['compass:server', 'autoprefixer:server']
          },
          autoprefixer: {
            files: ['<%= yeoman.app %>/_assets/css/**/*.css'],
            tasks: ['copy:stageCss', 'autoprefixer:server']
          },
          jekyll: {
            files: [
              '<%= yeoman.app %>/**/*.{html,yml,md,mkd,markdown}',
              '!<%= yeoman.app %>/_bower_components/**/*'
            ],
            tasks: ['jekyll:server']
          },
          livereload: {
            options: {
              livereload: '<%= connect.options.livereload %>'
            },
            files: [
              '.jekyll/**/*.html',
              '.tmp/_assets/css/**/*.css',
              '{.tmp,<%= yeoman.app %>}/<%= js %>/**/*.js',
              '<%= yeoman.app %>/_assets/media/**/*.{gif,jpg,jpeg,png,svg,webp}'
            ]
          }
        },
        connect: {
          options: {
            port: 9000,
            livereload: 35729,
            // change this to '0.0.0.0' to access the server from outside
            hostname: 'localhost'
          },
          livereload: {
            options: {
              open: true,
              base: [
                '.tmp',
                '.jekyll',
                '<%= yeoman.app %>'
              ]
            }
          },
          dist: {
            options: {
              open: true,
              base: [
                '<%= yeoman.dist %>'
              ]
            }
          },
          test: {
            options: {
              base: [
                '.tmp',
                '.jekyll',
                'test',
                '<%= yeoman.app %>'
              ]
            }
          }
        },
        clean: {
          dist: {
            files: [{
              dot: true,
              src: [
                '<%= yeoman.dist %>/*',
                // Running Jekyll also cleans the target directory.  Exclude any
                // non-standard `keep_files` here (e.g., the generated files
                // directory from Jekyll Picture Tag).
                '!<%= yeoman.dist %>/.git*'
              ]
            }]
          },
          server: [
            '.tmp',
            '.jekyll'
          ]
        },
        compass: {
          options: {
            // If you're using global Sass gems, require them here.
            // require: ['singularity', 'jacket'],
            bundleExec: true,
            sassDir: '<%= yeoman.app %>/_assets/scss',
            cssDir: '.tmp/_assets/css',
            imagesDir: '<%= yeoman.app %>/_assets/media',
            javascriptsDir: '<%= yeoman.app %>/_assets/javascript',
            importPath: '<%= yeoman.app %>/_bower_components/',
            relativeAssets: false,
            httpImagesPath: '/_assets/media',
            httpGeneratedImagesPath: '/_assets/media/generated',
            outputStyle: 'expanded',
            raw: 'extensions_dir = "<%= yeoman.app %>/_bower_components"\n'
          },
          dist: {
            options: {
              generatedImagesDir: '<%= yeoman.dist %>/_assets/media/generated'
            }
          },
          server: {
            options: {
              debugInfo: true,
              generatedImagesDir: '.tmp/_assets/media/generated'
            }
          }
        },
        autoprefixer: {
          options: {
            browsers: ['last 2 versions']
          },
          dist: {
            files: [{
              expand: true,
              cwd: '<%= yeoman.dist %>/_assets/css',
              src: '**/*.css',
              dest: '<%= yeoman.dist %>/_assets/css'
            }]
          },
          server: {
            files: [{
              expand: true,
              cwd: '.tmp/_assets/css',
              src: '**/*.css',
              dest: '.tmp/_assets/css'
            }]
          }
        },
        wiredep: {
          options: {
            cwd: '<%= yeoman.app %>'
          },
          app: {
            src: ['<% yeoman.app%>/_layouts/*.html'],
            ignorePath:  /\.\.\//
          },
          sass: {
            src: ['<%= yeoman.app%>/_assets/scss/{,*/}*.{scss,sass}'],
            ignorePath: /(\.\.\/){1,2}bower_components\//
          }
        },
        jekyll: {
          options: {
            bundleExec: true,
            config: '_config.yml,_config.build.yml',
            src: '<%= yeoman.app %>'
          },
          dist: {
            options: {
              dest: '<%= yeoman.dist %>',
            }
          },
          server: {
            options: {
              config: '_config.yml',
              dest: '.jekyll'
            }
          },
          check: {
            options: {
              doctor: true
            }
          }
        },
        useminPrepare: {
          options: {
            dest: '<%= yeoman.dist %>'
          },
          html: '<%= yeoman.dist %>/index.html'
        },
        usemin: {
          options: {
            assetsDirs: '<%= yeoman.dist %>',
          },
          html: ['<%= yeoman.dist %>/**/*.html'],
          css: ['<%= yeoman.dist %>/_assets/css/**/*.css']
        },
        htmlmin: {
          dist: {
            options: {
              collapseWhitespace: true,
              collapseBooleanAttributes: true,
              removeAttributeQuotes: true,
              removeRedundantAttributes: true
            },
            files: [{
              expand: true,
              cwd: '<%= yeoman.dist %>',
              src: '**/*.html',
              dest: '<%= yeoman.dist %>'
            }]
          }
        },
        // Usemin adds files to concat
        concat: {},
        // Usemin adds files to uglify
        uglify: {},
        // Usemin adds files to cssmin
        cssmin: {
          dist: {
            options: {
              check: 'gzip'
            }
          }
        },
        imagemin: {
          dist: {
            options: {
              progressive: true
            },
            files: [{
              expand: true,
              cwd: '<%= yeoman.dist %>',
              src: '**/*.{jpg,jpeg,png}',
              dest: '<%= yeoman.dist %>'
            }]
          }
        },
        svgmin: {
          dist: {
            files: [{
              expand: true,
              cwd: '<%= yeoman.dist %>',
              src: '**/*.svg',
              dest: '<%= yeoman.dist %>'
            }]
          }
        },
        copy: {
          dist: {
            files: [
              {
                expand: true,
                dot: true,
                cwd: '<%= yeoman.app %>',
                src: [
                  // Jekyll processes and moves HTML and text files.
                  // Usemin moves CSS and javascript inside of Usemin blocks.
                  // Copy moves asset files and directories.
                  '_assets/media/**/*',
                  '_assets/fonts/**/*',
                  // Like Jekyll, exclude files & folders prefixed with an underscore.
                  '!**/_*{,/**}',
                  // Explicitly add any files your site needs for distribution here.
                  //'_bower_components/jquery/jquery.js',
                  //'favicon.ico',
                  //'apple-touch*.png'
                ],
                dest: '<%= yeoman.dist %>'
              },
              {
                expand: true,
                flatten: true,
                dot: true,
                cwd: '<%= yeoman.app %>',
                src: [
                  '_bower_components/bootstrap-sass-official/assets/fonts/**/*'
                ],
                dest: '<%= yeoman.dist %>/_assets/css/bootstrap'
              }
            ]
          },
          server: {
            files: [
              {
                expand: true,
                dot: true,
                cwd: '<%= yeoman.app %>',
                src: [
                  // Jekyll processes and moves HTML and text files.
                  // Usemin moves CSS and javascript inside of Usemin blocks.
                  // Copy moves asset files and directories.
                  '_assets/media/**/*',
                  '_assets/fonts/**/*',
                  // Like Jekyll, exclude files & folders prefixed with an underscore.
                  '!**/_*{,/**}',
                  // Explicitly add any files your site needs for distribution here.
                  //'_bower_components/jquery/jquery.js',
                  //'favicon.ico',
                  //'apple-touch*.png'
                ],
                dest: '.tmp'
              },
              {
                expand: true,
                flatten: true,
                dot: true,
                cwd: '<%= yeoman.app %>',
                src: [
                  '_bower_components/bootstrap-sass-official/assets/fonts/**/*'
                ],
                dest: '.tmp/_assets/css/bootstrap'
              }
            ]
          },
          // Copy CSS into .tmp directory for Autoprefixer processing
          stageCss: {
            files: [
              {
                expand: true,
                dot: true,
                cwd: '<%= yeoman.app %>/_assets/css',
                src: '**/*.css',
                dest: '.tmp/_assets/css'
              }
            ]
          }
        },
        filerev: {
          options: {
            length: 4
          },
          dist: {
            files: [{
              src: [
                '<%= yeoman.dist %>/_assets/javascript/**/*.js',
                '<%= yeoman.dist %>/_assets/css/**/*.css',
                '<%= yeoman.dist %>/_assets/media/**/*.{gif,jpg,jpeg,png,svg,webp}',
                '<%= yeoman.dist %>/_assets/fonts/**/*.{eot*,otf,svg,ttf,woff}'
              ]
            }]
          }
        },
        buildcontrol: {
          dist: {
            options: {
              remote: '../',
              branch: 'gh-pages',
              commit: true,
              push: true
            }
          }
        },
        jshint: {
          options: {
            jshintrc: '.jshintrc',
            reporter: require('jshint-stylish')
          },
          all: [
            'Gruntfile.js',
            '<%= yeoman.app %>/_assets/javascript/**/*.js',
            'test/spec/**/*.js'
          ]
        },
        csslint: {
          options: {
            csslintrc: '.csslintrc'
          },
          check: {
            src: [
              '<%= yeoman.app %>/_assets/css/**/*.css',
              '<%= yeoman.app %>/_assets/scss/**/*.scss'
            ]
          }
        },
        concurrent: {
          server: [
            'compass:server',
            'copy:server',
            'jekyll:server'
          ],
          dist: [
            'compass:dist',
            'copy:dist'
          ]
        }
      });
    
      // Define Tasks
      grunt.registerTask('serve', function (target) {
        if (target === 'dist') {
          return grunt.task.run(['build', 'connect:dist:keepalive']);
        }
    
        grunt.task.run([
          'clean:server',
          'wiredep',
          'concurrent:server',
          'autoprefixer:server',
          'connect:livereload',
          'watch'
        ]);
      });
    
      grunt.registerTask('server', function () {
        grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
        grunt.task.run(['serve']);
      });
    
      // No real tests yet. Add your own.
      grunt.registerTask('test', [
      //   'clean:server',
      //   'concurrent:test',
      //   'connect:test'
      ]);
    
      grunt.registerTask('check', [
        'clean:server',
        'jekyll:check',
        'compass:server',
        'jshint:all',
        'csslint:check'
      ]);
    
      grunt.registerTask('build', [
        'clean',
        // Jekyll cleans files from the target directory, so must run first
        'jekyll:dist',
        'wiredep',
        'concurrent:dist',
        'useminPrepare',
        'concat',
        'autoprefixer:dist',
        'cssmin',
        'uglify',
        'imagemin',
        'svgmin',
        'filerev',
        'usemin',
        'htmlmin'
        ]);
    
      grunt.registerTask('deploy', [
        'check',
        'test',
        'build',
        'buildcontrol'
        ]);
    
      grunt.registerTask('default', [
        'check',
        'test',
        'build'
      ]);
    };
    
    //使用发电机jekyllrb 1.2.1于2014-07-08生成
    "严格使用",;
    //目录参考:
    //css:_资产/css
    //指南针:_资产/SCS
    //javascript:_资产/javascript
    //图像:_资源/媒体
    //字体:_资源/字体
    module.exports=函数(grunt){
    //显示任务运行后经过的时间
    要求(“时间咕噜”)(咕噜);
    //加载所有Grunt任务
    要求('load-grunt-tasks')(grunt);
    grunt.initConfig({
    //可配置路径
    约曼:{
    应用程序:“应用程序”,
    dist:“dist”
    },
    观察:{
    鲍尔:{
    文件:['bower.json'],
    任务:['wiredep']
    },
    指南针:{
    档案:[
    “/_assets/scss/***.{scss,sass}”,
    “/_bower_components/bootstrap-sass-official/assets/stylesheets/*.{scss,sass}”],
    任务:['compass:server','autoprefixer:server']
    },
    自动刷新器:{
    文件:['/_assets/css/***.css'],
    任务:['copy:stageCss','autoprefixer:server']
    },
    杰基尔:{
    档案:[
    “/***.{html,yml,md,mkd,markdown}”,
    “!/_-bower\u-components/***”
    ],
    任务:['jekyll:server']
    },
    利弗雷罗德:{
    选项:{
    livereload:'
    },
    档案:[
    “.jekyll/***.html”,
    “.tmp/_assets/css/***.css”,
    “{.tmp,}/***/.js”,
    “/_assets/media/***.{gif,jpg,jpeg,png,svg,webp}”
    ]
    }
    },
    连接:{
    选项:{
    港口:9000,
    利弗雷罗德:35729,
    //将此更改为“0.0.0.0”以从外部访问服务器
    主机名:“localhost”
    },
    利弗雷罗德:{
    选项:{
    开放:是的,
    基数:[
    “.tmp”,
    “杰基尔先生”,
    ''
    ]
    }
    },
    地区:{
    选项:{
    开放:是的,
    基数:[
    ''
    ]
    }
    },
    测试:{
    选项:{
    基数:[
    “.tmp”,
    “杰基尔先生”,
    "测试",,
    ''
    ]
    }
    }
    },
    清洁:{
    地区:{
    档案:[{
    多特:没错,
    src:[
    '/*',
    //运行Jekyll也会清理目标目录。排除任何
    //此处为非标准的“保留文件”(例如,生成的文件
    //来自Jekyll图片标签的目录)。
    “!/.git*”
    ]
    }]
    },
    服务器:[
    “.tmp”,
    “杰基尔先生”
    ]
    },
    指南针:{
    选项:{
    //如果您使用的是全球Sass gems,请在此处使用。
    //要求:[“奇点”,“护套”],
    bundleExec:是的,
    s