赛格温的咕噜不认识萨斯



我正在尝试使用Cygwin在windows中创建一个非常简单的Grunt构建系统来处理编译,连接和缩小我的scss/css和coffee/js文件。

我遇到Grunt不识别Sass作为命令的问题。

我应该注意到,相同的Gruntfile,相同的任务,相同的包在linux上工作得很好(当然为什么!),这个问题仅仅与在Windows上实现相同的系统有关。

我已经正确安装了Ruby和Sass("Ruby -v"one_answers"Sass -v"都按预期工作),我从命令行编译scss到css没有问题

$ sass --update sass:css

,它有效地将所有。scss文件转换为。css

Grunt本身没有问题,将coffee编译成js,连接js或css文件,缩小它们并观察变化。

这里是完整的Gruntfile.js,供参考

module.exports = function(grunt) {
    grunt.initConfig({
            concat: {
                    js: {
                            src: 'js/*.js',
                            dest: 'build/js/scripts.js',
                    },
                    css: {
                            src: 'css/*.css',
                            dest: 'build/css/theme.css',
                    },
            },
            uglify: {
                    jsMin : {
                            files: {
                                    'build/js/scripts.min.js' : ['build/js/scripts.js']
                            },
                    },
            },
            cssmin: {
                    styleMin : {
                            files : {
                                    'build/css/theme.min.css' : ['build/css/theme.css']
                            },
                    },
            },
            watch: {
                    jsW: {
                            files: ['js/**/*.js'],
                            tasks: ['concat:js','uglify:jsMin'],
                    },
                    cssW: {
                            files: ['css/**/*.css'],
                            tasks: ['concat:css','cssmin'],
                    },
                    sassW: {
                            files: ['sass/**/*.scss'],
                            tasks: ['exec']
                    }
            },
            exec: {
                    Sass    : 'sass --update sass:css',
                    Coffee  : 'coffee -o js/ -c coffee/'
            }
    });

    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-exec');
    grunt.registerTask('default',['exec','concat','uglify','cssmin','watch']);
};

如果我启动grunt,它会显示以下警告

运行"exec:Sass" (exec)任务

'sass'不能被识别为内部或外部命令、可操作程序或批处理文件。

退出代码:1.

警告:任务"exec:Sass"失败。使用——force继续。

由于警告而中止。

正如我之前所说的,系统在linux上工作得很好,所以我猜我的路径有问题,但是为什么sass从命令行工作得很好,而不被grunt识别?


我想指出的最后一件事是,在一些挖掘和测试期间,试图猜测问题是什么,然后在SO上发布,我发现调用cygwin/bin中没有.exe文件的任何bash函数都会显示相同的错误

https://i.stack.imgur.com/DGLe5.png(测试'sass' 'sdoc'和'ruby.exe'文件)

修改grunt-exec用于测试:

exec: {
                    Sass    : 'sass -v',
                    Ruby    : 'ruby -v',
                    Sdoc    : 'sdoc -v',
}

grunt --force后显示如下https://i.stack.imgur.com/3boy7.png

while from normal command

$ sass -v && ruby -v && sdoc -v
Sass 3.4.16 (Selective Steve)
ruby 2.0.0p598 (2014-11-13) [x86_64-cygwin]
4.2.0

我真的不知道该从这里开始,任何帮助都会很感激。

我还没有找到解决问题的方法。但是,我确实找到了一个工作很好的解决方案,以防有人感兴趣或遇到与我相同的问题。

解决方案涉及直接通过Ruby运行sass(我的grunt-exec任务可以识别),因此我对Gruntfile.js进行如下编辑:

exec: {
                Sass    : 'ruby sass.rb'
        }

调用主目录中的sass.rb文件,该文件是一个ruby脚本文件。

require "sass"
options = {
    :syntax => :scss,
    :style => :compressed,
    :load_paths => ['./src/sass/']
    # load_paths is required in case your 'master.scss' files use @import to attach other scss files 
}
render = Sass::Engine.new(File.read("src/sass/master.scss"), options).render
File.write("src/css/master.css", render)

你可以在SASS文档中找到更多的选项


我知道这不是一个真正的答案对我的问题,但这是唯一的工作,立即没有任何问题。我仍然会试图找出为什么更常见的解决方案(grunt-contrib-sassgrunt-exec)不会工作,但有了这个解决方案,我有我的构建系统启动和运行。

最新更新