如何使用grunt-contrib-concat和grunt-contrib-uglify为每个单独的js文件创建源图?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用grunt-contrib-concat和grunt-contrib-uglify为每个单独的js文件创建源图?相关的知识,希望对你有一定的参考价值。
目前,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']
}
},
// ...
}
说明
- 在你的
concat
任务中,你需要首先将sourceMap
选项设置为true
。根据您当前的配置,这将在以下路径中创建源映射文件:build/_tsbc.js.map
注意:生成的地图文件的位置默认为dest
任务的angular
目标中定义的相同concat
路径 - 附加额外的.map
后缀。 - 然后在你的
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']
}
},
// ...
}
说明
- 与之前相同,将
sourceMap
选项设置为true
- 这次,添加
sourceMapName
选项并指定生成的源映射的路径。 注意:生成的地图文件的位置现在设置为:'build/my_map.map'
- 同样,在你的
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-contrib-concat和grunt-contrib-uglify为每个单独的js文件创建源图?的主要内容,如果未能解决你的问题,请参考以下文章