Grunt手表抛出NoMethodError

时间:2014-01-08 18:12:09

标签: css sass gruntjs compass-sass

我已阅读grunt,sass和指南针文档,但找不到有关此错误的更多信息。我还看到另一个有类似错误的人,但这是由于他们的contrib.rb文件中的语法问题,我不相信我在contrib.rb文件中。

问题:我运行grunt watch任务并在我对sass(* .scss)文件进行更改时随时出错。 错误如下:

NoMethodError on line 264 of /Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/configuration/inheritance.rb: _
Run with --trace to see the full backtrace

因此,我的sass文件都没有处理到我的css文件夹。我是咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜。我喜欢任何关于我的文件可能配置不正确的建议,或者是否有一个版本的指南针或sass与grunt相关的错误(所有都是最新的非beta版本)。

这是我的contrib.rb文件的文本:

require "susy"
css_dir = _/css
sass_dir = _/components/sass
javascripts_dir = _/js 
output_style = :compressed

我的gruntfile.js:

module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.initConfig({
  uglify: {
    my_target: {
        files: {
            '_/js/script.js': ['_/components/js/*.js'] //tells grunt to track and compress any .js file found in components/js folder   
        } //files
      } // my_target
    }, // uglify
  compass: {
    dev: {
        options: {
            config: 'config.rb',
        force: true // <-- ???
        } //options
    } //dev
  }, //compass
  watch: {
    options: { livereload: true },
    scripts: {
        files: ['_/components/js/*.js'],
        tasks: ['uglify']
    }, //scripts
    sass: {
        files: ['_/components/sass/*.scss'],
        tasks: ['compass:dev']
    }, //sass
    html: {
      files: ['*.html']
    }
   } // watch
  })// initConfig
 grunt.registerTask('default', 'watch'); //makes 'grunt' command automaticaly execute the watch command to monitor JS files
} //exports

我的项目文件夹结构:

sass_first_proj
   |
   _(folder)
     |
     components
     |
     css
     |
     js
   images
   node_modules
     |
     grunt
     |
     grunt-contrib-compass
     |
     grunt-contrib-uglify
     |
     grunt-contrib-watch
     |
     matchdep

 .gitignore
 |
 config.rb
 |
 gruntfile.js
 |
 index.html
 |
 package.json

2 个答案:

答案 0 :(得分:1)

不确定您是否能够解决此问题,但我收到了同样的错误。

我必须在目录前包含一个正斜杠才能使Grunt进入正确的路径。我在使用Grunt和Compass进行项目时使用了类似的步骤,而且我在我的电脑上,所以我只是将路径放在单引号中。根据项目目录的结构,config.rb文件中的两行各样如下所示:

css_dir = '/_/css'
sass_dir = '/_/components/sass'

同样在你的问题中,我注意到你说它是&#34; contrib.rb&#34;文件,但在您的文件目录中,它名为config.rb。你也可以在你的gruntfile.js文件中以config.rb的形式引用它,但我只是想确保项目根目录中的这个文件被命名为#34; config.rb&#34;。

我知道这是很多设置,所以我希望这适合你。

答案 1 :(得分:0)

所以这就是问题,我在使用Grunt指南针时从未使用过contrib.rb文件。我知道你可以,如果你让它工作,那很好。但另一个选择是只指定grunt配置中的路径。当然,这一切都假设您能够实际编译sass文件。当谷歌搜索该错误时,似乎很多时候它是contrib.rb文件导致问题的问题。

所以说,也许你可以不用contrib.rb文件而只使用Grunt?

compass: {
  dev: {
    options: {
      sassDir: "_/components/sass",
      specify: "_/components/sass/**/*.scss", // might not be necessary for you
      cssDir: "_/css",
      javascriptsPath: "_/js",
      outputStyle: "compressed",
      require: "susy"
    }
  }
}