如何在保持文件夹结构的同时grunt-uglify多个脚本文件

Kun*_*Waz 16 javascript gruntjs grunt-contrib-uglify

我没有找到一个好方法来grunt-uglify多个脚本文件分布在多个文件夹,同时保持文件夹结构包括uglified文件完好无损.我想要这样做的唯一原因是能够提高我正在处理的网页的"遗留"部分的性能.

我已经找到了解决这个问题的方法,我不想做,因为它需要花费很多时间,就像在这个答案中一样(它们分别指定每个src和dest对): 如何配置grunt. js分别缩小文件

我想要实现的一个例子:

**src dir (no uglify applied):**
src
 |- app1
    |- randomFile.js
    |- scripts
       |- file1.js
       |- file2.js
    |- libs
       |- file3.js
       |- file4.js
 |- app2
   |- scripts
       |- file1.js
       |- file2.js

**destination dir (uglify applied, same file name):**
dist
 |- app1
    |- randomFile.js
    |- scripts
       |- file1.js
       |- file2.js
    |- libs
       |- file3.js
       |- file4.js
 |- app2
    |- scripts
       |- file1.js
       |- file2.js
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果可能的话,想对CSS文件做同样的事情.

有谁知道这是否可能?

Wal*_*rée 23

关于你所链接的帖子Rafa Heringer的答案中的原则看起来很有希望,有点扭曲:

uglify: {
    min: {
        files: grunt.file.expandMapping(['path/**/*.js', 'path2/**/*.js'], 'destination/', {
            rename: function(destBase, destPath) {
                return destBase+destPath.replace('.js', '.min.js');
            }
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

这里唯一的区别是基本路径和带有扩展名的通配符文件名之间的双星号.这将遍历所有子文件夹,并且 - 希望 - 输出每个找到它在其合法文件夹中找到的文件夹.

输出将是:

path/test.js => destination/path/test.min.js
path/subpath1/abc.js => destination/path/subpath1/abc.min.js
path/subpath2/yey.js => destination/path/subpath2/yey.min.js
path2/foo.js => destination/path2/foo.min.js
Run Code Online (Sandbox Code Playgroud)

CSS使用grunt-contrib-cssmin插件执行相同操作时,上面提到的方法仍然可以工作,但是你必须将它与相关的插件配置相结合,这些配置必须到位才能输出缩小CSS的方式想.

PS:没试过自己跑吧!


tiv*_*net 14

与@DioNNiS的答案类似,但将缩小的文件存储在同一文件夹中:

    uglify: {
        all: {
            files: [{
                expand: true,
                cwd: 'path/to/js/',
                src: ['*.js', '!*.min.js'],
                dest: 'path/to/js/',
                ext: '.min.js'
            }]
        }
    }
Run Code Online (Sandbox Code Playgroud)


Den*_*ger 7

实际上你可以使用以下方法:

uglify: {
  all: {
    files: [{
      expand: true,
      cwd: 'js/',
      src: ['*.js', '**/*.js'],
      dest: 'js-min/',
      ext: '.min.js',
    }],
  },
}
Run Code Online (Sandbox Code Playgroud)