【问题标题】:Set working directory in gulpfile.js?在 gulpfile.js 中设置工作目录?
【发布时间】:2015-01-29 22:23:57
【问题描述】:

有没有办法在 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 所在的目录。)

谢谢!

【问题讨论】:

  • 这是获取脚本目录的一种方法,当然,但我怎样才能将该目录设置为我的工作目录呢?有process.cwd(),但看起来我不能通过它分配任何东西。 gulp 会暴露一些东西让我完成这个任务,还是只有节点命令才能提供的东西?
  • 不是已经这样做了吗?
  • 我不确定你是如何使用 Gulp,但它有两个主要方法,src 和 dest,你可以使用 path.join(__diename, 'src', '风格')nodejs.org/api/path.html#path_path_join_path1_path2
  • @coma 我确实知道这种可能性,但我想知道是否可以避免在每个目录前加上__dirname 的前缀,而是做类似process.cwd = __dirname 的事情。 Bower 在一个配置文件中提供了这个功能(诚然,这不是一回事),所以我想知道是否有办法减少冗长。

标签: javascript gulp


【解决方案1】:

除了option.cwd,还可以使用process.chdir(yourDir)

它可以在 gulpfile 的任何地方使用。例如

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

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

【讨论】:

    【解决方案2】:

    您应该使用path.join,而不是自己连接字符串,因为它会处理正确的斜线,并按照该路径添加快捷方式:

    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

    【讨论】:

    • 嗯。这可能符合我的需求——很高兴了解gulp.srcgulp.destcwd 参数。我通常喜欢尽量保持我的 gulpfile 简短(但可读),但如果文件较大,我可能最终会使用你的 final 方法。谢谢!
    • @jedd.ahyoung,您可以将 Gulp 流拆分为多个文件,并使用 coderwall.com/p/yzvbvw/… 等闭包将它们组合起来
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2016-09-18
    相关资源
    最近更新 更多