如何uglify一个文件夹中的多个.js文件并输出到不同的文件夹?

How to uglify multiple .js files in a folder and output them to a different folder?

我是 g运行t 的新手,我不知道在使用插件时如何定义路径 grunt-contrib-uglify-es

这是我的文件夹结构:

.
├── controllers
├── models
├── public
│   ├── build
│   │   ├─ foo.min.js
│   │   └─ x.min.js
│   ├── css
│   ├── font
│   └── js
│        ├─ foo.js
│        └─ x.js
├── routes
├── tests
├── utils
└── views

这是我的 g运行t 任务 :

// take all js file in public/js/ and put them in public/build/
uglify: {
  options: {
    mangle: false,
          banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
  },
  build: {
    files: [{
      expand: true,
      src: 'public/js/*.js',
      dest: 'public/build/',
      rename: function (dst, src) {
        console.log(dst);
        console.log(src);
        return src;
      }
    }]
  }
}

当我 运行 g运行t 时,它会在 public/js 中创建文件并覆盖现有文件。我不明白为什么。

我也试过这个:

expand: true,
src: 'js/*.js',
dest: 'build/',
cwd: 'public/',

现在它会在根目录下创建一个新文件夹 js,其中包含所有文件。

我想压缩 public/js/ 中的每个 .js 文件,然后将它们放入 public/build/

我显然迷路了,你能帮帮我吗?

为满足您的要求,当building the files object dynamically您需要利用;

  1. cwd 选项 - 描述如下:

    • cwd All src matches are relative to (but don't include) this path.
  2. rename函数,描述为:

    rename Embeds a customized function, which returns a string containing the new destination and filename. This function is called for each matched src file (after extension renaming and flattening).

Grunt 文件:

以下配置将达到您想要的结果。

module.exports = function (grunt) {

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

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        mangle: false,
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      build: {

        // Change your configuration to this...
        files: [{
          expand: true,
          cwd: 'public/js',
          src: '*.js',
          dest: 'public/build/',
          rename: function (dst, src) {
            return dst + '/' + src.replace('.js', '.min.js');
          }
        }]
      }
    }
  });

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