Grunt.js输出并将文件夹的内容写入文件?

时间:2013-03-26 20:58:59

标签: node.js gruntjs

目标:

动态地包括/static/js/**/*.js/static/css/**/*.css个文件<head>

方法:

我正在使用客户端模板部分,所以在这个例子中,我想写下所有内容的文件路径:

/static/js/**/*.js /templates/head.js.dust /static/css/**/*.css也是/templates/head.css.dust

文件路径当然不够。我需要一种方法来预处理输出,以便每个“文件”都包含适当的标签,如:

<!-- /templates/head.js.dust -->
<script src="/static/js/assests/jquery.js"></script>
<script src="/static/js/assests/jquery_ui.js"></script>
<script src="/static/js/app.js"></script>
...

<!-- /templates/head.css.dust -->
<link src="/static/css/assests/jquery_ui.css"/>
<link src="/static/css/app.css"/>
...

问题:

那里有一个grunt模块已经做了类似的事情吗?

奖励积分: 如果不是这样,我怎么才开始构建这样的东西?

1 个答案:

答案 0 :(得分:1)

您可以通过相当简单的方式完成此操作:

grunt.registerMultiTask("assetAppend", "Append JS/CSS assets to a file", function() {
    var paths = grunt.file.expand( this.data.paths ),
        out = this.data.output,
        contents = "";

    paths.forEach(function( path ) {
        if ( /\.js$/i.test( path ) ) {
            contents += '<script src="' + path + '"></script>';
        } else if ( /\.css$/i.test( path )) {
            contents += '<link rel="stylesheet" type="text/css" href=' + path + ' />';
        }
    });

    grunt.file.write( out, contents );
});

grunt.initConfig({
    assetAppend: {
        js: {
            paths: ["static/js/**/*.js"],
            output: "head.js.dust"
        },
        css: {
            paths: ["static/css/**/*.css"],
            output: "head.css.dust"
        }
    }
});

此示例现在是我的插件 grunt-contrib-assetpush

的一部分