2014-12-01 4 views
5

Есть ли способ установить рабочий каталог для Gulp в gulpfile, чтобы я мог запускать команду gulp из подкаталога без каких-либо проблем? Я запустил поиск и не нашел то, что искал.Установить рабочий каталог в gulpfile.js?

Чтобы уточнить, мне известно добавить префикс к файлам, которые я использую. Однако, вместо этого -

var gulp = require('gulp'); 
var jshint = require('gulp-jshint'); 
... 

var paths = { 
    js: [__dirname + 'app/*/*.js', __dirname + '!app/lib/**'], 
    css: __dirname + 'app/*/*.styl', 
    img: __dirname + 'app/img/*', 
    index: __dirname + '*.html', 
    dist: __dirname + 'dist' 
}; 

Я хотел бы сделать что-то вроде этого:

var gulp = require('gulp'); 
var jshint = require('gulp-jshint'); 
... 

gulp.cwd(__dirname); // This would be much easier to understand, and would make future edits a bit safer. 

var paths = { 
    js: ['app/*/*.js', '!app/lib/**'], 
    css: 'app/*/*.styl', 
    img: 'app/img/*', 
    index: '*.html', 
    dist: 'dist' 
}; 

Я интересно, если Глоток предоставляет эту функциональность. Возможно, сам узел позволяет это.

(Я понимаю, что, когда я запускаю команду, возможно, есть способ выполнить командную строку, но я хотел бы включить ее в файл gulp, особенно для целей распространения. Я хочу, чтобы рабочий каталог для gulp соответствовал каталог, в котором находится файл gulpfile.)

Спасибо!

+3

__dirname http://stackoverflow.com/a/8131696/94144? – coma

+1

Это один из способов получить каталог скриптов, но как установить этот каталог в качестве рабочего каталога? Там 'process.cwd()', но это не выглядит так, как будто я могу что-то передать через это. Делает ли gulp что-то, что позволяет мне выполнить это, или это то, что может предложить только команда узла? –

+0

Разве это уже не так? – Mathletics

ответ

4

Вместо конкатенации строк от себя, вы должны использовать path.join, так как он будет заботиться о надлежащем слэш, и следуя этому пути, вы можете добавить shorcut:

var path = require('path'), 
    p = function() { 

    Array 
     .prototype 
     .unshift 
     .call(arguments, __dirname); 

    return path.join.apply(path, arguments); 
}; 

console.log(p('a', 'b', 'c')); 

Или, хорошо, вы можете просто :

gulp.src(..., {cwd: __dirname}) 
gulp.dest(..., {cwd: __dirname}) 

Что-то вроде:

var src = function (globs, options) { 

    options = options || {}; 
    options.cwd = __dirname; 

    return gulp.src(globs, options); 
}; 

var dest = function (folder, options) { 

    options = options || {}; 
    options.cwd = __dirname; 

    return gulp.dest(folder, options); 
}; 

Смотри here и here.

+0

Хм. Это может соответствовать моим потребностям - и хорошо знать о аргументе 'cwd'' gulp.src' и 'gulp.dest'. Мне вообще нравится пытаться держать мои gulpfiles короткими (но читаемыми), но в случае больших я, скорее всего, в конечном итоге использую ваши окончательные методы. Благодаря! –

+0

@ jedd.ahyoung, вы можете разделить потоки Gulp на несколько файлов и объединить их с помощью закрытий, таких как https://coderwall.com/p/yzvbvw/defining-and-running-gulp-tasks-for-each-environment-on -The лета? р = 1 & д = авторский% 3Acoma – coma

9

Кроме option.cwd, вы можете также использовать process.chdir(yourDir)

он может быть использован в любом месте gulpfile. например

process.chdir(yourDir); 
var gulp = require('gulp'); 

Убедитесь, что Глоток является уточненным (> 3.8.10), это не может работать в старшую глотке.

Смежные вопросы