Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gruntjs 使用grunt的concat/uglify js文件_Gruntjs - Fatal编程技术网

Gruntjs 使用grunt的concat/uglify js文件

Gruntjs 使用grunt的concat/uglify js文件,gruntjs,Gruntjs,我有以下文件夹结构 root src ui ui1 js ui.js page1 page.js page2 page.js ui2 js

我有以下文件夹结构

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/文件夹,保持路径结构不变

我想以

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]文件夹将在以后添加,因此我需要将其动态化。 我能够实现的是,要么连接所有文件而不保留路径,要么保留路径,丑陋但不连接。感谢您的帮助

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

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

即使我们将多个源文件映射到单个目标文件,这也会起作用。文件说:

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

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

逻辑建立后,重命名函数的实现就相当简单了。我们的GrunFile将如下所示:

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']);

};

完美的解决方案,谢谢,不知道重命名功能,应该仔细阅读文档。您能解释一下clean任务吗?以前从未使用过它。@slash197:我正在使用grunt contrib clean任务在生成之前删除dist文件夹root/ui的内容。我这样做只是为了确保我们重新开始。如果要删除src/ui/ui2文件夹,这将确保根/ui/ui2被删除。