Gruntjs 为多个grunt concat操作重用src/dest位置

Gruntjs 为多个grunt concat操作重用src/dest位置,gruntjs,grunt-contrib-concat,Gruntjs,Grunt Contrib Concat,我目前使用以下方法进行此设置: 这段代码是有效的,但显然在这些字符串中有很多非干代码 我希望通过以下事实来澄清这一点: 始终希望'dest'为'dist/js/inject/' 始终希望“src”以“src/js/”开头 所以,在我看来,我可以说一些类似于这个伪代码的东西: concat: { injectedJs: { files: [{ expand: true, dest: 'dist/js/inject/',

我目前使用以下方法进行此设置:

这段代码是有效的,但显然在这些字符串中有很多非干代码

我希望通过以下事实来澄清这一点:

  • 始终希望'dest'为'dist/js/inject/'
  • 始终希望“src”以“src/js/”开头
所以,在我看来,我可以说一些类似于这个伪代码的东西:

concat: {
    injectedJs: {
        files: [{
            expand: true,
            dest: 'dist/js/inject/',
            cwd: 'src/js'

            //'beatportInject.js': ['thirdParty/jquery.js', 'inject/beatportInject.js'],
            //'streamusInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusInject.js'],
            //'streamusShareInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusShareInject.js'],
            //'youTubeInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeInject.js'],
            //'youTubeIFrameInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeIFrameInject.js']
        }]
    }
}

在那一点上我的想法不够。这可以通过Grunt实现吗,或者我需要重复一点吗?

记住,配置只是简单的javascript,所以不涉及Grunt的最简单的解决方案是

function prefix(fileConfig) {
    var newFileConfig = {};
    var distPrefix = 'dist/js/inject/';
    var srcPrefix = 'src/js/';

    for(var dest in fileConfig) {
        newFileConfig[distPrefix + dest] = srcPrefix + fileConfig[dest];
    }

    return newFileConfig;
}

grunt.initConfig({
    concat : {
        injectedJs : {
            files: [
                prefix({
                'beatportInject.js': ['thirdParty/jquery.js', 'inject/beatportInject.js'],
                'streamusInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusInject.js'],
                'streamusShareInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusShareInject.js'],
                'youTubeInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeInject.js'],
                'youTubeIFrameInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeIFrameInject.js']
            })
            ]
        }
    }
})

至于您的实际问题,连接脚本,似乎您真正应该研究的是类似Browserify或WebPack的东西。这将为您节省大量的麻烦。

如果您愿意使用commonjs和webpack,您只需声明入口点即可。据我所知,仅仅因为目标文件名不同,使用
concat
无法取得更好的效果。
function prefix(fileConfig) {
    var newFileConfig = {};
    var distPrefix = 'dist/js/inject/';
    var srcPrefix = 'src/js/';

    for(var dest in fileConfig) {
        newFileConfig[distPrefix + dest] = srcPrefix + fileConfig[dest];
    }

    return newFileConfig;
}

grunt.initConfig({
    concat : {
        injectedJs : {
            files: [
                prefix({
                'beatportInject.js': ['thirdParty/jquery.js', 'inject/beatportInject.js'],
                'streamusInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusInject.js'],
                'streamusShareInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusShareInject.js'],
                'youTubeInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeInject.js'],
                'youTubeIFrameInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeIFrameInject.js']
            })
            ]
        }
    }
})