Grunt files 扩展名注意点

假设 src 目录下有以下文件:

1
2
3
src/
├── a.js
└── c.test.js

然后使用以下 grunt 配置文件来把 src 里的 js 文件复制到 dest 目录,把扩展名改为 -min.js

1
2
3
4
5
6
7
8
9
10
11
12
grunt.initConfig({
  copy: {
    main: {
      expand: true,
      cwd: 'src/',
      src: '*.js',
      dest: 'dest/',
      filter: 'isFile',
      ext: '-min.js'
    }
  }
});

复制后的文件将是:

1
2
3
dest/
├── a-min.js
└── c-min.js

可以看到,c.test.js 变成了 c-min.js 而不是预期的 c.test-min.js

这是关于扩展名的认定的问题。grunt 支持把从第一个点号(first)后面的是扩展名或把最后一个点号(last)后的是扩展名,默认是 first,配置项是 extDot

故把配置修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
grunt.initConfig({
  copy: {
    main: {
      expand: true,
      cwd: 'src/',
      src: '*',
      dest: 'dest/',
      filter: 'isFile',
      ext: '-min.js',
      extDot: 'last'
    }
  }
});

这样构建后的文件将是:

1
2
3
dest
├── a-min.js
└── c.test-min.js

Done!