我正在尝试使用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-sass
和grunt-exec
)不会工作,但有了这个解决方案,我有我的构建系统启动和运行。