使用grunt concat / uglify js文件

时间:2017-10-08 11:42:58

标签: gruntjs

我有以下文件夹结构

root
    src
        ui
            ui1
                js
                    ui.js
                page1
                    page.js
                page2
                    page.js
            ui2
                js
                    ui.js
                page1
                    page.js
                page2
                    page.js
                page3
                    page.js
    css
    js
    ui

是否可以在此处运行grunt uglify以实现以下目的:将ui[x]文件夹中的所有js文件从root/src/连接到root/ui/文件夹,保持路径结构完整?< / p>

我想以

结束
root
    src
        ui
            ui1
                js
                    ui.js
                page1
                    page.js
                page2
                    page.js
            ui2
                js
                    ui.js
                page1
                    page.js
                page2
                    page.js
                page3
                    page.js
    css
    js
    ui
            ui1
                ui.min.js
            ui2
                ui.min.js

我的问题是稍后会添加ui[x]page[x]文件夹,因此我需要将其设置为动态。 我能够实现的是连接所有文件而不保留路径或保持路径,uglify但不连接。任何帮助表示赞赏。

files: {
    expand: true,
    cwd: 'src/ui/',
    src: '**/*',
    dest: 'ui/'
}

1 个答案:

答案 0 :(得分:1)

问题的解决方案是实施rename function。当默认配置无法满足您的用例时,此函数的目的是让您更好地控制src / dest映射。将为与rename模式匹配的每个源文件调用src函数,并允许您定义确定目标文件的逻辑。

即使我们将多个源文件映射到单个目标文件,这也会有效。文档说:

  

如果将多个匹配的src路径重命名为相同的目标(即,如果将两个不同的文件重命名为同一个文件),则每个输出都将添加到它的源数组中。

我们的目标,从root/src/ui/目录开始,收集以“.js”结尾的每个文件路径,并为每个文件路径生成一个目标文件路径,该路径是第一个目录名加“/ui.min.js ”。例如,ui1/js/ui.js将映射到ui1/ui.min.js,而ui2/page3/page.js将映射到ui2/ui.min.js

建立逻辑后,rename函数的实现相当简单。我们的Gruntfile如下所示:

module.exports = function (grunt) {
    grunt.initConfig({
        clean: {
            dist: ['root/ui']
        },

        uglify: {
            dist: {
                files: [
                    {
                        expand: true,
                        cwd: 'root/src/ui/',
                        src: ['**/*.js'],
                        dest: 'root/ui/',
                        rename: function (dest, src) {
                            return dest + src.substring(0, src.indexOf('/') + 1) + 'ui.min.js';
                        }
                    }
                ]
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-uglify');

    grunt.registerTask('default', ['clean', 'uglify']);

};