Gruntjs grunt contrib复制语法导致进程选项混淆

Gruntjs grunt contrib复制语法导致进程选项混淆,gruntjs,grunt-contrib-copy,Gruntjs,Grunt Contrib Copy,我试图在复制时替换不同文件中的一些占位符。我的Grunfile工作得很好,但是添加了process选项来进行替换,它就是不工作。以下是我的GrunFile的相关部分: grunt.initConfig({ copy: { js: { files: [{ expand: true, cwd: 'src/wp-content/themes/pilau-starter/',

我试图在复制时替换不同文件中的一些占位符。我的Grunfile工作得很好,但是添加了process选项来进行替换,它就是不工作。以下是我的GrunFile的相关部分:

grunt.initConfig({

    copy: {
        js: {
            files: [{
                expand: true,
                cwd: 'src/wp-content/themes/pilau-starter/',
                src: ['**/*.js'],
                dest: 'public/wp-content/themes/pilau-starter/'
            }],
            options: {
                process: function ( content ) {
                    console.log( content );
                    content = content.replace( /pilauBreakpointLarge/g, breakpoints.large );
                    content = content.replace( /pilauBreakpointMedium/g, breakpoints.medium );
                    return content;
                }
            }
        },
    }

});
路径可以在GitHub上的代码上下文中理解:(公共目录没有提交到repo,因为它是一个启动主题)。这些路径是我的原始GrunFile中的变量,在所有其他任务中都可以正常工作

所有的VAR都设置好了。我加入了
console.log(content)
来检查进程函数是否在实际运行——它似乎没有运行,所以我猜它是基本语法

有一个答案()似乎解决了这个问题,但据我所知,这种方法只是糟糕的JS语法——不确定它是如何被标记为正确的

--详细的
用于运行复制任务的输出:

Running "copy:js" (copy) task
Verifying property copy.js exists in config...OK
Files: src/wp-content/themes/pilau-starter/js/admin.js -> public/wp-content/themes/pilau-starter/js/admin.js
Files: src/wp-content/themes/pilau-starter/js/flickity.js -> public/wp-content/themes/pilau-starter/js/flickity.js
Files: src/wp-content/themes/pilau-starter/js/global.js -> public/wp-content/themes/pilau-starter/js/global.js
Files: src/wp-content/themes/pilau-starter/js/modernizr.js -> public/wp-content/themes/pilau-starter/js/modernizr.js
Files: src/wp-content/themes/pilau-starter/js/picturefill.js -> public/wp-content/themes/pilau-starter/js/picturefill.js
Files: src/wp-content/themes/pilau-starter/js/respond.js -> public/wp-content/themes/pilau-starter/js/respond.js
Options: processContent=false, processContentExclude=[], process=undefined
Options: processContent=false, processContentExclude=[], process=undefined
Copying src/wp-content/themes/pilau-starter/js/admin.js -> public/wp-content/themes/pilau-starter/js/admin.js
Reading src/wp-content/themes/pilau-starter/js/admin.js...OK
Writing public/wp-content/themes/pilau-starter/js/admin.js...OK

这似乎根本不是
process
选项的问题,而是
srcmetemedir
的问题。我将记录它以确保您确切知道它是什么,因为它似乎导致
复制任务找不到任何文件(因此不调用处理函数)。

您的grunt contrib copy版本为0.4.0。正如@nemesv在上面正确指出的,在这个版本中使用的属性名称应该是
processContent
而不是
process

我克隆了您的repo并切换到
json断点
branch。然后运行
grunt copy:js
,它替换了内容

现在,当您运行
grunt copy:js--verbose
时,它仍然会显示

processContent
未定义,因为grunt使用
JSON.stringify
记录值。当传递函数定义时,stringify
返回
undefined


如果您感兴趣,下面是记录所有选项的方法

    Log.prototype.writeflags = function(obj, prefix) {
        var wordlist;
        if (Array.isArray(obj)) {
            wordlist = this.wordlist(obj);
        } else if (typeof obj === 'object' && obj) {
            wordlist = this.wordlist(Object.keys(obj).map(function(key) {
                var val = obj[key];
                return key + (val === true ? '' : '=' + JSON.stringify(val));
            }));
        }
        this._writeln((prefix || 'Flags') + ': ' + (wordlist || '(none)'.cyan));
        return this;
    };

如果使用
--verbose
标志运行任务,输出是什么?另外,
nonull
选项在调试时也很有用。您使用的是哪个版本的
grunt contrib copy
?您可以尝试使用
processContent
而不是
process
,因为它在v0.4.1和更早版本中使用过。您还可以尝试控制台记录您的
断点。大的
断点和
断点。中的
断点可能未在配置中正确设置…运行时是否将文件复制到输出+1关于
--verbose
的建议。我测试了您的Grunfile摘录(使用硬编码变量),它完全符合预期(替换时复制,记录内容)。所以我会怀疑一个不正确的变量,很可能是
srcmetemedir
,就像复制找不到文件一样,进程没有执行,您也没有得到日志,正如您所描述的那样。你在哪里定义变量?很抱歉这里有未声明的变量,我已经编辑并用实际路径替换了它们。这些路径适用于其他一切。我还添加了
--verbose
输出-我猜
process=undefined
是问题所在吗?其他一切正常-我的编辑从src/复制到/public/fine<代码>断点
记录正常。抱歉,忘记将其关闭。我已将其替换为它设置的值。var可以很好地用于其他所有方面。另请参见上文编辑中的输出
--verbose
——文件似乎正常。我所做的任何编辑都是复制的,只是没有进行替换。