在gulpfile.js中设置工作目录?

时间:2014-12-01 20:11:28

标签: javascript gulp

有没有办法在gulpfile中设置Gulp的工作目录,这样我就可以从子目录运行gulp命令而不会遇到任何问题?我搜索了这个并没找到我要找的东西。

为了澄清,我知道为我正在使用的文件添加前缀。但是,而不是这个 -

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文件中,特别是出于分发目的。我希望gulp的工作目录与gulpfile所在的目录。)

谢谢!

2 个答案:

答案 0 :(得分:9)

option.cwd外,您还可以使用process.chdir(yourDir)

它可以在gulpfile中的任何地方使用。 e.g。

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

确保您的gulp是最新的(> 3.8.10),这可能不适用于较旧的gulp。

答案 1 :(得分: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);
};

查看herehere