【发布时间】:2015-02-07 09:08:33
【问题描述】:
我正在尝试使用 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
忘记香草 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');
});
我已经尝试了各种错误修复,例如: 删除所有 vanilla sass 编译的 .css 文件并运行 gulp 编译,但没有生成 .css。 还尝试删除 vanilla sass 编译生成的所有 *.map 文件,然后运行 gulp 但没有 dice。
任何人都可以看到明显的错误吗?
提前致谢。
【问题讨论】:
-
我无法回答您的问题,因为我是 node/gulp 的新手,但我能够通过编辑我的 node_modules/gulp 中的 gulp-sass
index.js文件来解决我自己的 gulp-sass 问题-sass 文件夹在我的项目中。我添加了一堆console.log语句来打印出发生了什么,最终我发现了我的问题。希望对您有所帮助!