整理或连接JavaScript文件条件

时间:2015-12-17 20:13:48

标签: node.js gruntjs grunt-contrib-uglify grunt-contrib-concat

我的Scripts文件夹中有一个“Lib”文件夹和一个“App”文件夹。

Lib文件夹包含第三部分库JavaScript文件。其中一些在没有原始来源的情况下被缩小,其他的我们有原始来源。

App文件夹包含我们自己的所有JavaScript文件,所有这些文件都没有缩小。

我是Grunt的新手,但我有一个gruntfile,它执行以下操作:

  • 对Lib文件夹中的所有JS文件进行Uglify,并生成包含源映射的缩小版本。
  • 对App文件夹中的所有JS文件进行Uglify,并生成包含源映射的缩小版本。

明显的问题:Lib文件夹中的一些文件被缩小,因此再次缩小它们/生成源映射是一个坏主意,并且可能由于各种原因而失败。

我的解决方案:我只在Lib文件夹中的.js文件中运行Uglify到lib-unmin.min.js。然后我将所有已经缩小的文件连接到lib-min.min.js文件中,然后我将这两个文件连接在一起以获取lib.min.js.

新问题 如果我不能将已经缩小的脚本连接到其他minififed脚本的末尾而不打破它会怎么样?

我有一个像这样的依赖问题:

  • scripts / lib / a.js(运行b需要)
  • scripts / lib / b.min.js(c运行所必需的)
  • scripts / lib / c.js(运行App脚本所需)

如果我的gruntfile中有这些文件路径的数组,按此顺序,将所有文件按顺序uglifying / concating为单个缩小的JS文件的最简单方法是什么,确保我们不要尝试缩小缩小的文件?

其他开发者在类似情况下做了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我喜欢将这些文件连接起来,然后将它们全部整合在一起。这样uglify确保在压缩变量名时不会复制变量值。

您可以在concats中捆绑任意数量的文件。让不同的联合小组一起丑化,并保持第一,第二,第三,...'这样的顺序:

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      app: {
        options: {
          sourceMap: true,
          sourceMapName: 'build/maps/map.map'
        },
        files: {
          'build/app.min.js': ['build/js/app-first-unmin.js', 'build/js/app-second-min.js', 'build/js/app-third-unmin.js']
        }
      }
    },

    concat: {
      options: {
        separator: ';'
      },
      firstUnminified: {
        src: [
          'lib/underscore.js'
        ],
        dest: 'build/js/app-first-unmin.js'
      },
      secondMinified: {
        src: [
          'lib/moment.min.js'
        ],
        dest: 'build/js/app-second-min.js'
      },
      thirdUnminified: {
        src: [
          'lib/favico.js'
        ],
        dest: 'build/js/app-third-unmin.js'
      }
    },
  });

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

  grunt.registerTask('default', ['concat:firstUnminified', 'concat:secondMinified', 'concat:thirdUnminified','uglify']);
};