我试图在Windows中使用Grunt创建一个非常简单的构建系统,使用Cygwin来处理我的scss / css和coffee / js文件的编译,连接和缩小。
我有问题,Grunt没有认出Sass是一个命令。
我应该注意,相同的Gruntfile,相同的任务,相同的软件包在Linux上完美运行(当然为什么!),这个问题仅与在Windows上实现相同的系统有关。
我已经正确安装了Ruby和Sass(&#34; ruby -v&#34;&#34; sass -v&#34;按预期工作)我没有问题从命令行编译scss到css < / p>
$ 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
它会显示以下警告
跑步&#34; exec:Sass&#34; (执行)任务
&#39; SASS&#39;不被识别为内部或外部命令,可操作程序或批处理文件。
退出代码:1。
警告:任务&#34;执行:Sass&#34;失败。使用--force继续。
因警告而中止。
正如我之前所说的那样,系统在linux上完美运行,所以我猜我的路径有问题,但为什么那么从命令行开始工作就好了,而不是通过grunt识别?
最后我要指出的是,在一些挖掘和测试期间尝试猜测问题是什么之前发布在SO上,我发现调用任何没有.exe文件的bash函数cygwin / bin显示相同的错误
http://i.stack.imgur.com/DGLe5.png(测试文件&#39; sass&#39;&#39; sdoc&#39;&#39; ruby.exe&#39;)
修改了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
我真的不知道从哪里开始,任何帮助都会受到赞赏。
答案 0 :(得分: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)
中找到更多选项
我知道这不是我的问题的实际答案,但这是唯一可以立即解决的问题。我仍然会尝试弄清楚为什么更常见的解决方案(grunt-contrib-sass
和grunt-exec
)无法正常工作,但通过这种解决方法,我的构建系统已经启动并运行。