【问题标题】:Sass not recognized by Grunt in CygwinCygwin 中的 Grunt 无法识别 Sass
【发布时间】:2015-08-13 13:58:06
【问题描述】:

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

我遇到了 Grunt 无法将 Sass 识别为命令的问题。

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

我已经正确安装了 Ruby 和 Sass(“ruby -v”和“sass -v”都按预期工作)并且我从命令行将 scss 编译成 css 没有问题

$ sass --update sass:css

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

Grunt 本身可以正常工作,将咖啡编译成 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”(执行)任务

'sass' 不是内部或外部命令、可运行程序或批处理文件。

退出代码:1。

警告:任务“exec:Sass”失败。使用 --force 继续。

由于警告而中止。

正如我之前所说的系统在 linux 上完美运行,所以我猜我的路径有问题,但是为什么 sass 会在命令行中正常工作而不能通过 grunt 识别?


我想指出的最后一件事是,在一些挖掘和测试过程中试图猜测问题出在 SO 上之前,我发现调用任何没有 .exe 文件的 bash 函数cygwin/bin 显示同样的错误

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

为测试修改了 grunt-exec:

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

}

他们在grunt --force 之后显示了以下内容 http://i.stack.imgur.com/3boy7.png

在普通命令行中

$ 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

我真的不知道从这里去哪里,任何帮助将不胜感激。

【问题讨论】:

  • 您应该查看一个名为 grunt-contrib-sass 的 npm 包,它将您的 sass 编译为 css。走这条路可能会避免你现在遇到的问题。
  • 使用grunt-contrib-sass 会引发以下错误:警告:您需要安装 Ruby 和 Sass 并在 PATH 中才能执行此任务。更多信息:github.com/gruntjs/grunt-contrib-sass 使用 --force 继续。 这更奇怪,因为两者都已安装并在我的 PATH 中。我将添加我找到的解决方法作为答案
  • 在你的机器上全局安装 sass 和 ruby​​。

标签: sass gruntjs cygwin grunt-exec


【解决方案1】:

我仍然没有找到解决问题的方法。 但是,我确实找到了一种很好的解决方法,以防万一有人感兴趣或遇到与我相同的问题。

解决方案涉及直接通过 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 documentation中找到更多选项


我知道这不是我的问题的实际答案,但这是唯一可以立即正常工作且没有任何问题的方法。我仍然会尝试找出为什么更常见的解决方案(grunt-contrib-sassgrunt-exec)不起作用,但通过这种解决方法,我的构建系统已启动并运行。

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2015-11-11
    • 2018-10-21
    • 2015-04-01
    相关资源
    最近更新 更多