Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Commit 66069e7

Browse files
Rob Wierzbowskisindresorhus
authored andcommitted
Close GH-68: Make path to source files relative.
1 parent 38e5192 commit 66069e7

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

index.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ var fs = require('fs');
33
var path = require('path');
44
var chalk = require('chalk');
55
var dargs = require('dargs');
6+
var slash = require('slash');
67
var gutil = require('gulp-util');
78
var spawn = require('win-spawn');
89
var eachAsync = require('each-async');
910
var intermediate = require('gulp-intermediate');
1011

11-
function rewriteSourcemapPaths (tempDir, origBase, cb) {
12+
function rewriteSourcemapPaths (cssDir, relPath, cb) {
1213
var glob = require('glob');
1314

14-
glob(path.join(tempDir, '**/*.map'), function (err, files) {
15+
glob(path.join(cssDir, '**/*.map'), function (err, files) {
1516
if (err) {
1617
cb(err);
1718
return;
@@ -25,10 +26,14 @@ function rewriteSourcemapPaths (tempDir, origBase, cb) {
2526
}
2627

2728
var sourceMap = JSON.parse(data);
29+
var stepUp = path.relative(path.dirname(file), cssDir);
2830

2931
// rewrite sourcemaps to point to the original source files
3032
sourceMap.sources = sourceMap.sources.map(function (source) {
31-
return path.join(origBase, source.replace(/\.\.\//g, ''));
33+
var sourceBase = source.replace(/\.\.\//g, '');
34+
35+
// normalize to browser style paths if we're on windows
36+
return slash(path.join(stepUp, relPath, sourceBase));
3237
});
3338

3439
fs.writeFile(file, JSON.stringify(sourceMap), next);
@@ -43,7 +48,7 @@ module.exports = function (options) {
4348
options = options || {};
4449
options.cacheLocation = options.cacheLocation || path.join(procDir, '.sass-cache');
4550
options.update = '.:' + compileDir;
46-
var args = dargs(options, ['bundleExec', 'watch', 'poll']);
51+
var args = dargs(options, ['bundleExec', 'watch', 'poll', 'sourcemapPath']);
4752
var command;
4853

4954
// Error handling
@@ -108,8 +113,10 @@ module.exports = function (options) {
108113
return cb();
109114
}
110115

111-
if (options.sourcemap) {
112-
rewriteSourcemapPaths(tempDir, fileProps.base, function (err) {
116+
if (options.sourcemap && options.sourcemapPath) {
117+
var cssDir = path.join(tempDir, compileDir);
118+
119+
rewriteSourcemapPaths(cssDir, options.sourcemapPath, function (err) {
113120
if (err) {
114121
this.emit('error', new gutil.PluginError('gulp-ruby-sass', err));
115122
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@
4242
"dargs": "^0.1.0",
4343
"each-async": "^0.1.3",
4444
"glob": "^4.0.2",
45-
"gulp-intermediate": "^1.1.0",
45+
"gulp-intermediate": "^2.0.0",
4646
"gulp-util": "^2.2.0",
47+
"slash": "^0.1.3",
4748
"win-spawn": "^2.0.0"
4849
},
4950
"devDependencies": {

readme.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ var gulp = require('gulp');
2323
var sass = require('gulp-ruby-sass');
2424

2525
gulp.task('default', function () {
26-
return gulp.src('src/app.scss')
27-
.pipe(sass({sourcemap: true}))
28-
.pipe(gulp.dest('dist'));
26+
return gulp.src('src/scss/app.scss')
27+
.pipe(sass({sourcemap: true, sourcemapPath: '../scss'}))
28+
.pipe(gulp.dest('dist/css'));
2929
});
3030
```
3131

@@ -45,7 +45,19 @@ Note: gulp-ruby-sass only compiles Sass; it won't watch your files. If you want
4545
Type: `Boolean`
4646
Default: `false`
4747

48-
Enable Source Map. **Requires Sass 3.3.0**
48+
Enable Source Map. **Requires Sass >= 3.3.0 and the [`dest` option](#dest).**
49+
50+
51+
##### sourcemapPath
52+
53+
Type: `string`
54+
55+
A relative path from the output CSS directory to the Sass source directory as seen by your web server.
56+
57+
Because gulp-ruby-sass can't know your CSS destination directory or your server setup you have to give a little extra information to help the browser find sourcemaps. Examples:
58+
59+
- If source is `site/scss`, destination is `site/css`, and you're serving from `site`: `{ sourcemapPath: '../scss' }`.
60+
- If source is `app/styles`, destination is `.tmp/styles`, and you're serving both `.tmp` and `app`: `{ sourcemapPath: '.' }`.
4961

5062

5163
##### trace

test.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@ var assert = require('assert');
33
var gutil = require('gulp-util');
44
var sass = require('./index');
55
var EOL = require('os').EOL;
6+
67
var testFile = new gutil.File({
78
cwd: __dirname,
8-
base: __dirname + '/fixture',
9-
path: __dirname + '/fixture/nested/fixture.scss',
9+
base: __dirname + '/styles',
10+
path: __dirname + '/styles/nested/fixture.scss',
1011
contents: new Buffer('$blue:#3bbfce;.content-navigation{border-color:$blue;}')
1112
});
1213

1314
it('should compile Sass with sourcemaps', function (cb) {
1415
this.timeout(20000);
1516

17+
// Assume gulp.src('app/styles/**/*.scss')
18+
// Assume gulp.dest('dist/styles')
19+
// Assume connect().use(connect.static('app')).use(connect.static('.tmp'))
20+
1621
var stream = sass({
1722
sourcemap: true,
23+
sourcemapPath: '.',
1824
quiet: true
1925
});
2026

@@ -35,7 +41,7 @@ it('should compile Sass with sourcemaps', function (cb) {
3541
assert.equal(file.relative, 'nested/fixture.css.map');
3642
assert.equal(sourcemap.version, 3);
3743
assert.equal(sourcemap.file, 'fixture.css');
38-
assert.equal(sourcemap.sources[0], testFile.path);
44+
assert.equal(sourcemap.sources[0], '../nested/fixture.scss');
3945
}
4046
});
4147

0 commit comments

Comments
 (0)