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

Commit 9f24bf2

Browse files
Extract the OS temp dir to its own option, separate from container
The use cases for changing the OS temp dir are different from the use cases for specifying a task-specific container. Let's decouple them for better user interface. Need to change temp dir use cases: - No access to the OS temp dir due to permissions (reported in windows and on-server issues) - OS temp dir is reported incorrectly (Windows, https://github.com/sindresorhus/gulp-ruby-sass/issues/2301) Need to specify container use cases: - multiple grs tasks running at once
1 parent a344f83 commit 9f24bf2

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

index.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@ var osTmpdir = require('os-tmpdir');
1616
var pathExists = require('path-exists');
1717
var File = require('vinyl');
1818
var logger = require('./logger');
19-
var TMP_DIR = osTmpdir();
2019

2120
// for now, source is only a single directory or a single file
2221
module.exports = function (source, options) {
2322
var stream = new Readable({objectMode: true});
2423
var cwd = process.cwd();
2524
var defaults = {
25+
tempDir: osTmpdir(),
2626
container: 'gulp-ruby-sass',
2727
verbose: false,
2828
sourcemap: false
2929
};
3030
var command;
3131
var args;
3232
var base;
33-
var tempDir;
33+
var intermediateDir;
3434
var destFile;
3535
var compileMappings;
3636

@@ -48,27 +48,28 @@ module.exports = function (source, options) {
4848
options.sourcemap = options.sourcemap === true ? 'file' : 'none';
4949

5050
// sass options need unix style slashes
51-
tempDir = slash(path.join(TMP_DIR, options.container));
51+
intermediateDir = slash(path.join(options.tempDir, options.container));
5252

5353
// directory source
5454
if (path.extname(source) === '') {
5555
base = path.join(cwd, source);
56-
compileMappings = source + ':' + tempDir;
56+
compileMappings = source + ':' + intermediateDir;
5757
options.update = true;
5858
}
5959
// single file source
6060
else {
6161
base = path.join(cwd, path.dirname(source));
62-
destFile = slash(path.join(tempDir, path.basename(source, path.extname(source)) + '.css')); // sass options need unix style slashes
62+
destFile = slash(path.join(intermediateDir, path.basename(source, path.extname(source)) + '.css')); // sass options need unix style slashes
6363
compileMappings = [ source, destFile ];
64-
mkdirp(tempDir);
64+
mkdirp(intermediateDir);
6565
}
6666
// TODO: implement glob file source
6767

6868
args = dargs(options, [
6969
'bundleExec',
7070
'watch',
7171
'poll',
72+
'tempDir',
7273
'container',
7374
'verbose'
7475
]).concat(compileMappings);
@@ -91,19 +92,19 @@ module.exports = function (source, options) {
9192
sass.stderr.setEncoding('utf8');
9293

9394
sass.stdout.on('data', function (data) {
94-
logger.stdout(data, tempDir, stream);
95+
logger.stdout(data, intermediateDir, stream);
9596
});
9697

9798
sass.stderr.on('data', function (data) {
98-
logger.stderr(data, tempDir, stream);
99+
logger.stderr(data, intermediateDir, stream);
99100
});
100101

101102
sass.on('error', function (err) {
102103
logger.error(err, stream);
103104
});
104105

105106
sass.on('close', function (code) {
106-
glob(path.join(tempDir, '**', '*'), function (err, files) {
107+
glob(path.join(intermediateDir, '**', '*'), function (err, files) {
107108
if (err) {
108109
stream.emit('error', new gutil.PluginError('gulp-ruby-sass', err));
109110
}
@@ -126,7 +127,7 @@ module.exports = function (source, options) {
126127
var vinylFile = new File({
127128
cwd: cwd,
128129
base: base,
129-
path: file.replace(tempDir, base)
130+
path: file.replace(intermediateDir, base)
130131
});
131132
var sourcemap;
132133

@@ -155,7 +156,7 @@ module.exports = function (source, options) {
155156
// TODO: This kills caching. Keeping will push files through that are not in
156157
// the current gulp.src. We need to decide whether to use a Sass style caching
157158
// strategy, or a gulp style strategy, and what each would look like.
158-
rimraf(tempDir, function () {
159+
rimraf(intermediateDir, function () {
159160
stream.push(null);
160161
});
161162
});

readme.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,27 +105,34 @@ gulp.task('sass', function() {
105105
});
106106
```
107107

108+
#### tempDir
109+
110+
Type: `String`
111+
Default: the OS temp directory as reported by [os-tempDir](https://github.com/sindresorhus/os-tmpdir)
112+
113+
This plugin compiles Sass files to a temporary directory before pushing them through the stream. Use `tempDir` to choose an alternate directory if you aren't able to use the default OS temporary directory.
114+
108115
#### container
109116

110117
Type: `String`
111118
Default: `gulp-ruby-sass`
112119

113-
Name of the temporary directory used to process files. If you're running multiple instances of gulp-ruby-sass at once, specify a separate container for each task to avoid files mixing together.
120+
If you only have a single gulp-ruby-sass task you can ignore this option. If you're running multiple gulp-ruby-sass tasks at once you must specify a separate `container` for each task to avoid file collisions. The value is appended to the `tempDir` option.
114121

115122
```js
116123
var gulp = require('gulp');
117124
var sass = require('gulp-ruby-sass');
118125

119126
gulp.task('sass-app', function () {
120-
return sass('source/app.scss', {container: 'gulp-ruby-sass-app'})
127+
return sass('source/app.scss', {container: 'app'})
121128
.on('error', function (err) {
122129
console.error('Error!', err.message);
123130
})
124131
.pipe(gulp.dest('result/app'));
125132
});
126133

127134
gulp.task('sass-site', function () {
128-
return sass('source/site.scss', {container: 'gulp-ruby-sass-site'})
135+
return sass('source/site.scss', {container: 'site'})
129136
.on('error', function (err) {
130137
console.error('Error!', err.message);
131138
})

0 commit comments

Comments
 (0)