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

author author     2022-12-29     114

关键词:

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

我该怎么做呢?

答案

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

注意:以下两个解决方案都需要在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']
    
  
,

grunt

安装Grunt-cli:cnpminstall-ggrunt-cli新建项目文件夹,生成package.json:cnpminit-y安装Grunt和所需要的插件合并文件:grunt-contrib-concat语法检查:grunt-contrib-jshintScss编译:grunt-contrib-sass压缩文件:grunt-contrib-uglify监听文件变动:grunt-contri 查看详情

如何使用 php 和 mysql 使用纬度和经度进行几何搜索

】如何使用php和mysql使用纬度和经度进行几何搜索【英文标题】:Howtodoageometricsearchusinglatitudeandlongitudeusingphpandmysql【发布时间】:2010-05-0311:30:54【问题描述】:有没有人知道如何使用纬度和经度搜索使用纬度和经度使用php和mysql... 查看详情

如何接收和使用 NSErrorPointer

】如何接收和使用NSErrorPointer【英文标题】:HowtoreceiveanduseNSErrorPointer【发布时间】:2014-07-0617:33:33【问题描述】:我不是在问如何将NSErrorPointer传递给函数,而是如何接收和使用它。我找不到任何关于此的文档。像这样的:funcdo... 查看详情

如何使用日落和日出数据

】如何使用日落和日出数据【英文标题】:Howtousesunsetandsunrisedata【发布时间】:2015-01-0303:58:09【问题描述】:我看到HueAPI在“日光”传感器上提供了地理位置字段和日出/日落偏移量。具体来说:latlongsunriseoffsetsunsetoffset目前发... 查看详情

如何使用模板继承和组件

】如何使用模板继承和组件【英文标题】:Howtousetemplateinheritanceandcomponents【发布时间】:2019-11-0310:14:37【问题描述】:我正在尝试将组件模式与模板一起使用:template<typenameComponentGraphics>structObjectComponentGraphics*graphics;//thereis... 查看详情

委托和接口如何互换使用?

】委托和接口如何互换使用?【英文标题】:Howcanadelegate&interfacebeusedinterchangeably?【发布时间】:2011-01-0123:54:52【问题描述】:我可以使用接口方法代替委托吗?如何?我发现搜索接口方法比使用委托更快。我会很感激一个简... 查看详情

如何使用 SqlDataReader 返回和使用 IAsyncEnumerable

】如何使用SqlDataReader返回和使用IAsyncEnumerable【英文标题】:HowtoReturnandConsumeanIAsyncEnumerablewithSqlDataReader【发布时间】:2020-03-0813:52:34【问题描述】:请看以下两种方法。第一个返回IAsyncEnumerable。第二个试图消耗它。usingSystem.Coll... 查看详情

你好,请问swiperjs如何安装和使用?

】你好,请问swiperjs如何安装和使用?【英文标题】:Hello,canIwanttoknowhowtoinstallanduseswiperjs【发布时间】:2021-12-1820:23:21【问题描述】:我是swiperjs的新手,我想知道如何使用它。很困惑,我安装swiperjs和导入的时候有什么区别【... 查看详情

如何使用接口和 JPA

】如何使用接口和JPA【英文标题】:HowtoworkwithinterfacesandJPA【发布时间】:2012-02-1609:34:43【问题描述】:首先我应该说我对JavaEE还很陌生,而且我还没有很强的Java理论背景。我无法掌握如何在Java中同时使用JPA和interfaces。为了说... 查看详情

如何使用 authlib 保存和重用令牌

】如何使用authlib保存和重用令牌【英文标题】:Howtosaveandreusetokenswithauthlib【发布时间】:2021-12-1519:11:13【问题描述】:我是authlib的初学者,并试图理解它的概念。我试图了解,如何使用authlib保存和重复使用获取的令牌。我创... 查看详情

如何使用 sqlContext 计算累积和

】如何使用sqlContext计算累积和【英文标题】:HowtocalculatecumulativesumusingsqlContext【发布时间】:2016-01-1116:18:19【问题描述】:我知道我们可以使用Windowfunctioninpyspark来计算累积和。但Window仅在HiveContext中受支持,在SQLContext中不支持... 查看详情

如何覆盖使用功能和使用权限

】如何覆盖使用功能和使用权限【英文标题】:HowcanIoverrideuses-featureanduses-permission【发布时间】:2016-10-1919:26:38【问题描述】:我在我的项目中有以下权限<permissionandroid:name=".com.permission.C2D_MESSAGE"android:protectionLevel="signature"/>... 查看详情

如何使用 WiX 和 MSI 进行静默安装和卸载?

】如何使用WiX和MSI进行静默安装和卸载?【英文标题】:HowdoIdoasilentinstallanduninstallwithWiXandMSI?【发布时间】:2011-02-2308:21:12【问题描述】:如何在WiX中创建一个不向用户显示任何UI对话框并使用默认设置进行安装、升级和卸载的... 查看详情

如何使用邮递员发布对象和列表

】如何使用邮递员发布对象和列表【英文标题】:HowtopostobjectandListusingpostman【发布时间】:2015-09-2900:49:29【问题描述】:我正在使用postmanpackagedapp发送帖子请求。我想请求以下控制器。如何使用邮递员对象(带值)和使用原始... 查看详情

如何使用铸铁和 jms 适配器?

】如何使用铸铁和jms适配器?【英文标题】:HowtoworkonCastironandjmsadapters?【发布时间】:2015-10-0621:27:35【问题描述】:CastIron和JMS适配器在IBMMobileFirstPlatformFoundation中有什么用途?如何执行CastIron和JMS适配器?我已经完成了SQL和HTTP... 查看详情

如何安装和开始使用 Vuetify 和 Vue.js 3

】如何安装和开始使用Vuetify和Vue.js3【英文标题】:HowtoinstallandgetstartedwithVuetifyandVue.js3【发布时间】:2021-07-2414:20:33【问题描述】:在哪里可以找到与Vue.js3兼容的新Vuetify版本文档以及如何使用Vuecli安装和设置它:在vue2中我们这... 查看详情

如何同时使用 UpateView 和 ListView?

】如何同时使用UpateView和ListView?【英文标题】:HowcaniuseUpateViewandListViewtogether?【发布时间】:2021-09-0906:41:32【问题描述】:我有一个要更新的表单,但是这个页面还有一个要显示的对象列表,我不知道如何组合UpdateView和ListView... 查看详情

如何使用 Java 和 PostgreSQL 执行 \d tablename [重复]

】如何使用Java和PostgreSQL执行\\\\dtablename[重复]【英文标题】:Howexecute\\dtablenameusingJavaandPostgreSQL[duplicate]如何使用Java和PostgreSQL执行\\dtablename[重复]【发布时间】:2019-08-1607:09:07【问题描述】:如何使用Java和PostgreSQL执行\\dtablename... 查看详情