我试图使用gulp-ruby-sass和/或gulp-sass,但两个都不适合我,并认为我已经正确设置了所有设置。我看了很多其他的SO帖子,但是对我来说什么都没有用。
我还有另一个gulp任务,它递归地将资产目录和index.html从src复制到dist,这每次都有效。
要测试sass设置是否正确,我运行一个vanilla sass编译然后运行gulp; sass更改工作并通过递归副本呈现。这是sass测试的命令:
$ sass ./sass/main.scss ./src/assets/css/main.css
$ gulp
忘记vanilla sass测试并返回到gulp sass问题 - 在我的gulpfile中我运行gulp sass任务,然后运行递归复制任务,所以如果它有效,那么应该应用sass更改并且复制。至少那是我的想法。
这是我的目录结构,显示相关文件:
├── src
│ ├── index.html
│ └── assets
│ ├── css
│ │ └── main.css
│ ├── js
│ │ └── app.js
│ └── img
│ └── etc.jpg
│
├── dist
│ └── index.html ( from ./src via recursive copy)
│ └── assets
│ └── (same as ./src/assets via recursive copy)
│
├── sass
│ ├── main.scss
│ ├── _partial1.scss
│ ├── _partial2.scss
│ └── etc ...
│
├── gulpfile.js
│
├── node_modules
│ └── etc ...
│
└── bower_components
└── etc ...
在gulpfile.js中有几个文件映射对象,它们适用于src / assets /的递归副本。但是为了测试gulp-ruby-sass任务,我对sass / css路径进行了硬编码,以消除文件映射错误的可能性。
为了记录我在OSX Maverics 10.9.5上运行并认为我有正确的环境设置:
$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13]
$ sass -v
Sass 3.4.9 (Selective Steve)
这是我的gulpfile.js显示了我迄今为止尝试过的方法,其中gulp-sass相关任务被注释掉了:
var gulp = require('gulp');
var watch = require('gulp-watch');
var gsass = require('gulp-ruby-sass');
// var gsass = require('gulp-sass');
var gutil = require('gulp-util');
// Base paths:
var basePaths = {
srcRoot: './src/',
distRoot: './dist/',
bowerRoot: './bower_components/'
};
// File paths:
var filePaths = {
sassRoot: basePaths.srcRoot + 'sass/',
assetsBuildRoot: basePaths.srcRoot + 'assets/',
jqMin: basePaths.bowerRoot + 'jquery/dist/jquery.min.js',
html: basePaths.srcRoot + 'index.html'
};
// With gulp-ruby-sass
gulp.task('compile-sass', function() {
gulp.src('./sass/main.scss')
.pipe(gsass({sourcemap: true, sourcemapPath: './sass/'}))
.on('error', function (err) { console.log(err.message); })
.pipe(gulp.dest('./src/assets/css'));
});
// With gulp-sass
// gulp.task('gsass', function () {
// gulp.src('./sass/*.scss')
// .pipe(gsass())
// .pipe(gulp.dest('./src/assets/css'));
// });
// Assets directory copied recursively from /src to /dist:
gulp.src(filePaths.assetsBuildRoot + '**/*.*', {base : basePaths.srcRoot})
.pipe(gulp.dest(basePaths.distRoot));
// Copy index.html from /src to /dist:
gulp.src(filePaths.html)
.pipe(gulp.dest(basePaths.distRoot));
gulp.task('default', function() {
// With gulp-ruby-sass
// return gulp.src('./sass/main.scss')
// .pipe(gsass({sourcemap: true, sourcemapPath: './sass/'}))
// .on('error', function (err) { console.log(err.message); })
// .pipe(gulp.dest('./src/assets/css'));
// gulp.watch('compile-sass');
console.log('You reached the finishing line');
});
我尝试过各种各样的bugfix,例如: 删除所有vanilla sass编译的.css文件并运行gulp编译,但不生成.css。 还尝试删除由vanilla sass编译生成的所有* .map文件,然后运行gulp但没有骰子。
任何人都可以看到任何明显错误的东西吗?
提前致谢。
答案 0 :(得分:1)
如果您使用的是Sass> = 3.4,则需要安装gulp-ruby-sass版本1.0.0-alpha:
npm install --save-dev gulp-ruby-sass@1.0.0-alpha
在这个新版本中,gulp-ruby-sass是一个gulp源适配器,语法略有改变。而不是:
gulp.task('compile-sass', function() {
gulp.src('./sass/main.scss')
task code here
});
新语法是:
gulp.task('compile-sass', function() {
return sass('./sass/main.scss')
task code here
});
您可以在新版本文档中找到更多信息,包括sourcemaps的新语法。 https://github.com/sindresorhus/gulp-ruby-sass/tree/rw/1.0