问题 grunt.js - 缩小文件时的多个目的地


我的grunt.js有一个典型的缩小任务:

min: {
    dist: {
        src: ['dist/precook.js'],
        dest: 'dist/precook.min.js'
    }
}

拥有多个目标文件的最简单方法是什么?我想缩小成:

  • DIST / precook.min.js
  • 例如/ JS /供应商/ precook.min.js

内置的min任务 似乎不支持多个目的地,所以我认为这可以通过简单的“复制”任务来实现。有人可以指出我正确的方向吗?


4447
2017-10-16 00:31


起源



答案:


我用了 咕噜-contrib请复制 插入:

安装时 NPM

npm install grunt-contrib-copy

修改 grunt.js (添加复制任务定义和加载复制插件):

    ...
    copy: {
        dist: {
            files: {
                'example/js/vendor/': 'dist/precook.min.js'
            }
        }
    }
    ...

grunt.loadNpmTasks('grunt-contrib-copy');

可选 寄存器 copy 进入grunt的默认任务

这里增加的美妙之处在于您现在也可以执行所有其他复制任务。甚至支持模式,例如复制所有缩小的文件('dist/*.min.js')。


9
2017-10-16 12:45



完美,这正是我想要的。感谢您注册默认组合任务的额外旅行! - Matt Stone


答案:


我用了 咕噜-contrib请复制 插入:

安装时 NPM

npm install grunt-contrib-copy

修改 grunt.js (添加复制任务定义和加载复制插件):

    ...
    copy: {
        dist: {
            files: {
                'example/js/vendor/': 'dist/precook.min.js'
            }
        }
    }
    ...

grunt.loadNpmTasks('grunt-contrib-copy');

可选 寄存器 copy 进入grunt的默认任务

这里增加的美妙之处在于您现在也可以执行所有其他复制任务。甚至支持模式,例如复制所有缩小的文件('dist/*.min.js')。


9
2017-10-16 12:45



完美,这正是我想要的。感谢您注册默认组合任务的额外旅行! - Matt Stone


concat: {
            css: {
                src: ['UI.controls/assets/css/*.css'],
                dest: 'UI.controls/assets/css/min/production.css'
            },

            js: {
                src: ['UI.controls/assets/js/*.js'],
                dest: 'UI.controls/assets/js/min/production.js'
            },

            js2: {
                src: ['UI.core/assets/js/*.js'],
                dest: 'UI.core/assets/js/min/production.js'
            }

        },

        cssmin: {
            css: {
                src: 'UI.controls/assets/css/min/production.css',
                dest: 'UI.controls/assets/css/min/production.min.css'
            }
        },

        uglify: {
            js: {
                src: 'UI.controls/assets/js/min/production.js',
                dest: 'UI.controls/assets/js/min/production.min.js'
            },

            js2: {
                src: 'UI.core/assets/js/min/production.js',
                dest: 'UI.core/assets/js/min/production.min.js'
            }
        },


        watch: {
            css: {
                files: ['UI.controls/assets/css/*.css'],
                tasks: ['concat:css', 'cssmin:css']
            },
            js: {
                files: ['UI.controls/assets/js/*.js'],
                tasks: ['concat:js', 'uglify:js']
            },

            js2: {
                files: ['UI.core/assets/js/*.js'],
                tasks: ['concat:js', 'uglify:js']
            }

        }

6
2017-09-30 10:44





这是一种替代方法(旁边 @jalonen如果您正在使用,可能会让您感兴趣的解决方案 requirejs 模块化你的项目,然后你可以使用 requirejs优化器 缩小你的模块。

首先,您需要添加 咕噜-的contrib-requirejs 到你的项目:

npm install grunt-contrib-requirejs --save-dev

Grunt配置:

        requirejs: {
            production:{
                options:{
                    // don't include libaries when concatenating/minifying
                    paths:{
                        angular:'empty:',
                        jquery:'empty:'
                    },
                    baseUrl:'path/to/src/js',
                    dir:'path/to/target/js',
                    // keeps only the combined files
                    removeCombined:true,
                    modules:[
                        {name:'app', exclude: ['moduleA', 'moduleB']},
                        {name:'moduleA'},
                        {name:'moduleB'}
                    ]
                }
            }
        }
        ...

     grunt.loadNpmTasks('grunt-contrib-copy');

说明:

假设你有这个依赖树(-> 手段 依赖于取决于):

app -> moduleA -> moduleA1
               -> moduleA2              
app -> moduleB -> moduleB1
               -> moduleB2            

缩小后你将有三个文件:

  • app (缩小版的应用程序)
  • moduleA (缩小版 moduleAmoduleA1,和 moduleA2
  • moduleB (缩小版 moduleBmoduleB1,和 moduleB2

1
2018-03-18 16:40



谢谢@asgoth。自从最初的问题和我现在正在使用以来,我有更多的咕噜声(0.4~)经历 grunt-contrib-requirejs 以类似的方式。 - Matt Stone


有类似的问题,并创建了一个 咕噜多任务 在多个目录上运行指定任务的列表

用法确切的情况: ```

min: {
    dist: {
        src: ['dist/precook.js'],
        dest: 'dist/precook.min.js'
    }
},
multidest: {
    minifiedFiles: {
        tasks: ['min'],
        dest: [
            'dist/precook.min.js',
            'example/js/vendor/precook.min.js'
       ]
    }
}

```


0
2017-08-14 18:16