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

标签 gruntjs source-maps grunt-contrib-uglify grunt-contrib-concat

目前,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']
    }
  }
},

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

我该怎么做?

最佳答案

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

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


1。使用源映射的默认生成名称:

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

    注意:生成的 map 文件的位置默认与 concatangular 目标中定义的 dest 路径相同> 任务 - 附加额外的 .map 后缀。

  2. 然后在您的 uglify 任务中添加 sourceMapIn选项并将其值(字符串)设置为在上面第一阶段生成的 .map 文件的路径。即

    sourceMapIn: './build/_tsbc.js.map'
    

2。源映射的显式定义名称:

还可以为 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选项并指定生成的源映射的路径。

    注意:生成的 map 文件的位置现在设置为:

    'build/my_map.map'

  3. 再次在您的 uglify 任务中添加 sourceMapIn选项并将其值设置为上一点中指定的相同路径。即

    sourceMapIn: './build/my_map.map'
    

编辑

我刚刚注意到 uglify 任务中的 bower 目标并不依赖于之前的 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']
    }
  }
},

关于gruntjs - 如何使用 grunt-contrib-concat 和 grunt-contrib-uglify 为每个单独的 js 文件创建源映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49077517/

相关文章:

windows - 在 Windows 上运行 grunt.cmd 的多个问题

javascript - sourceMapRootpath 使用 LESS 获得源映射

javascript - 如何使用缩小的javascript?

intellij-idea - 使用 IntelliJ 调试 CoffeeScript

javascript - Grunt 连接任务和中间件 Access-Control-Allow-Origin

google-chrome - TypeScript 源映射文件不适用于 Chrome

node.js - 在 WebStorm 中调试已编译的 ES6 nodejs 应用程序

javascript - 相当于 Internet Explorer 11 中 Google Chrome 'Add source map...' 的功能

gruntjs - Grunt uglify 找不到文件

javascript - 如何使用 grunt-contrib-uglify 压缩 js 文件?