11

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

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

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

  • dist/precook.min.js
  • 示例/js/vendor/precook.min.js

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

4

4 回答 4

9

我会使用grunt-contrib-copy插件:

使用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')。

于 2012-10-16T12:45:14.980 回答
7
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']
            }

        }
于 2014-09-30T10:44:01.103 回答
1

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

首先,您需要将grunt-contrib-requirejs添加到您的项目中:

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

咕噜声配置:

        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(缩小版moduleAmoduleA1moduleA2
  • moduleB(缩小版moduleBmoduleB1moduleB2
于 2013-03-18T16:40:39.750 回答
1

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

具体情况的用法:```

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'
       ]
    }
}

```

于 2014-08-14T18:16:12.663 回答