如何使用grunt将已编译的jade文件复制到目标文件夹

asg*_*oth 11 build-automation node.js npm gruntjs pug

对于我正在处理的单页应用程序,我有以下结构:

  • DIST
    • CSS
    • JS
    • LIB
    • 谐音
    • 的index.html
  • SRC
    • CSS
    • JS
    • LIB
    • 意见
      • 谐音
      • index.jade

Express服务器将使用目录dist来为项目提供服务.我有一些琐碎的grunt任务(使用grunt-contrib-clean,grunt-contrib-copy)来清理dist并将src/css,src/js,src/lib复制到dist.

问题在于src/views.该目录包含需要编译为html文件的jade文件.在编译之后我想在dist中使用它们(dist根中的index.html,partials作为subdir).

目前我正在使用grunt-contrib-jade任务来编译和复制jade文件.我想将它们复制到dist,因为我不想将已编译的html文件添加到源代码控制中.但是现在这不是真的可行,因为你必须指定每个jade文件(现在只有少数,但会增长):

   jade: {
        compile: {
            options: {
                pretty: true
            },
            files: {
                // TODO make one line
                'dist/index.html': ['src/views/index.jade'],
                'dist/partials/banner.html': ['src/views/partials/banner.jade'],
                'dist/partials/dashboard.html': ['src/views/partials/dashboard.jade'],
                'dist/partials/navbar.html': ['src/views/partials/navbar.jade'],
                'dist/partials/transfer.html': ['src/views/partials/transfer.jade']
            }
        }
    },
Run Code Online (Sandbox Code Playgroud)

有没有办法使用grunt-contrib-jade任务(或另一个)与目录过滤器?像这样:

   jade: {
        compile: {
            options: {
                pretty: true
            },
            dir: {
                'dist': ['src/views']
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

And*_*eyM 20

来自Grunt wiki的一点澄清- 扩展映射:

grunt.file.expandMapping(patterns, dest [, options])
Run Code Online (Sandbox Code Playgroud)

请注意,虽然此方法可用于以编程方式为多任务生成文件数组,但首选" 配置任务指南 "中"动态构建文件对象"部分中描述的执行此操作的声明性语法.

假设如上所述,配置将如下所示:

files: [ { 
  expand: true, 
  src: "**/*.jade", 
  dest: "dist/", 
  cwd: "src/views", 
  ext: '.html'
} ];
Run Code Online (Sandbox Code Playgroud)

与声明性配置相同的结果.

  • 我不知道为什么,但我必须删除[]表单文件:所以`files:{...}`适用于我和`files:[{...}]`throw error`Object#<Object> has没有方法'indexOf' (2认同)

asg*_*oth 10

我最终升级到grunt 0.4(这导致了一些其他问题,但我能够处理).

使用grunt版本0.4,可以使用grunt.file.expandMapping:

    jade: {
        compile: {
            options: {
                pretty: true
            },
            files: grunt.file.expandMapping(['**/*.jade'], 'dist/', {
                cwd: 'src/views',
                rename: function(destBase, destPath) {
                    return destBase + destPath.replace(/\.jade$/, '.html');
                }
            })

        }
    },
Run Code Online (Sandbox Code Playgroud)