【发布时间】: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