如何使用grunt-contrib-concat和grunt-contrib-uglify为每个单独的js文件创建源图?

问题描述 投票:0回答:1

目前,concat和uglify设置是:

concat: {
  options: {
    // options
  },
  angular: {
    src: ['public/**/*.js', '!public/**/*.min.js', '!public/lib/**/*.js'],
    dest: 'build/_main.js',
  }
},

uglify: {
  options: {
    mangle: false,
    sourceMap: true,
  },
  app: {
    files: {
      'public/js/app.min.js': ['build/_main.js']
    }
  },
  bower: {
    files: {
      'public/js/lib.min.js': ['build/_bower.js']
    }
  }
},

这将在Sources下的dev工具中创建一个源映射。这个源映射是可用的,但我宁愿能够逐个文件地搜索并浏览开发工具中的每个文件。如果保留整个项目目录和文件结构会很好,所以我可以搜索并浏览每个文件并添加调试器等。

我该怎么做呢?

gruntjs source-maps grunt-contrib-uglify grunt-contrib-concat
1个回答
2
投票

这可以通过按如下方式配置任务来实现:

注意:以下两个解决方案都需要在concat任务之前运行uglify任务。


1. Using default generated names for source maps:

concat: {
  options: {
    sourceMap: true // <-- 1. Enable source maps
  },
  angular: {
    src: ['public/**/*.js', '!public/**/*.min.js', '!public/lib/**/*.js'],
    dest: 'build/_tsbc.js',
  }
},

uglify: {
  options: {
    mangle: false,
    sourceMap: true,
    sourceMapIn: './build/_tsbc.js.map' // <-- 2. Define .map file to use.
  },
  app: {
    files: {
      'public/js/app.min.js': ['build/_tsbc.js']
    }
  },
  // ...
} 

说明

  1. 在你的concat任务中,你需要首先将sourceMap选项设置为true。根据您当前的配置,这将在以下路径中创建源映射文件: build/_tsbc.js.map 注意:生成的地图文件的位置默认为dest任务的angular目标中定义的相同concat路径 - 附加额外的.map后缀。
  2. 然后在你的uglify任务中添加sourceMapIn选项并将其值(String)设置为上面第一阶段生成的.map文件的路径。即 sourceMapIn: './build/_tsbc.js.map'

2. Explicitly defined names for source maps:

也可以定义concat任务生成的源映射文件的特定名称和路径。例如:

concat: {
  options: {
    sourceMap: true,  // <-- 1. Enable source maps
    sourceMapName: 'build/my_map.map'  // <-- 2. Specify output path
  },
  angular: {
    src: ['public/**/*.js', '!public/**/*.min.js', '!public/lib/**/*.js'],
    dest: 'build/_tsbc.js',
  }
},

uglify: {
  options: {
    mangle: false,
    sourceMap: true,
    sourceMapIn: './build/my_map.map'  // <-- 3. Define .map file to use.
  },
  app: {
    files: {
      'public/js/app.min.js': ['build/_tsbc.js']
    }
  },
  // ...
} 

说明

  1. 与之前相同,将sourceMap选项设置为true
  2. 这次,添加sourceMapName选项并指定生成的源映射的路径。 注意:生成的地图文件的位置现在设置为: 'build/my_map.map'
  3. 同样,在你的uglify任务中添加sourceMapIn选项并将其值设置为前一点中指定的相同路径。即 sourceMapIn: './build/my_map.map'

编辑

我刚刚注意到你在bower任务中的uglify目标不依赖于之前的concat任务的输出。对于这种情况,您需要在每个目标中嵌套options对象。例如:

uglify: {
  app: {
    options: {  // <-- Specific options for `app` target 
      mangle: false,
      sourceMap: true,
      sourceMapIn: './build/my_map.map'  // <-- 3. Define .map file to use.
    },
    files: {
      'public/js/app.min.js': ['build/_tsbc.js']
    }
  },
  bower: {
    options: {  // <-- Specific options for `bower` target 
      mangle: false,
      sourceMap: true
      // <-- There's no `sourceMapIn` needed here.
    },
    files: {
      'public/js/lib.min.js': ['build/_bower.js']
    }
  }
},
© www.soinside.com 2019 - 2024. All rights reserved.