Sass Cygwin 中的 Grunt 无法识别
Sass not recognized by Grunt in Cygwin
我正在尝试使用 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 本身没有问题,将 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
它会显示以下警报
Running "exec:Sass" (exec) task
'sass' is not recognized as an internal or external command, operable program or batch file.
Exited with code: 1.
Warning: Task "exec:Sass" failed. Use --force to continue.
Aborted due to warnings.
正如我之前所说,系统在 linux 上完美运行,所以我猜想我的路径有问题,但为什么 sass 从命令行可以正常工作但未被识别通过咕噜?
我想指出的最后一件事是,在进行一些挖掘和测试以尝试猜测问题所在之前,我发现调用任何 bash 函数具有not an .exe file in 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
我真的不知道从这里去哪里,任何帮助将不胜感激。
我仍然没有找到解决问题的办法。
但是,我确实找到了一个工作正常的解决方法,以防万一有人感兴趣或遇到与我相同的问题。
解决方案涉及 运行 sass 直接通过 Ruby(我的 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-sass
和 grunt-exec
)不起作用,但是通过这个解决方法,我已经启动了我的构建系统并且 运行.
我正在尝试使用 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 本身没有问题,将 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
它会显示以下警报
Running "exec:Sass" (exec) task
'sass' is not recognized as an internal or external command, operable program or batch file.
Exited with code: 1.
Warning: Task "exec:Sass" failed. Use --force to continue.
Aborted due to warnings.
正如我之前所说,系统在 linux 上完美运行,所以我猜想我的路径有问题,但为什么 sass 从命令行可以正常工作但未被识别通过咕噜?
我想指出的最后一件事是,在进行一些挖掘和测试以尝试猜测问题所在之前,我发现调用任何 bash 函数具有not an .exe file in 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
我真的不知道从这里去哪里,任何帮助将不胜感激。
我仍然没有找到解决问题的办法。 但是,我确实找到了一个工作正常的解决方法,以防万一有人感兴趣或遇到与我相同的问题。
解决方案涉及 运行 sass 直接通过 Ruby(我的 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-sass
和 grunt-exec
)不起作用,但是通过这个解决方法,我已经启动了我的构建系统并且 运行.