这可以通过如下配置任务来实现:
注意:以下两种解决方案都要求concat 任务在uglify 任务之前运行。
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']
}
},
// ...
}
说明
-
在您的concat 任务中,您需要首先将sourceMap 选项设置为true。鉴于您当前的配置,这将在以下路径创建一个源映射文件:
build/_tsbc.js.map
注意:生成的地图文件的位置默认为与concat 任务的angular 目标中定义的相同dest 路径 - 附加了额外的.map 后缀。
-
然后在您的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']
}
},
// ...
}
说明
和之前一样,将sourceMap选项设置为true
-
这一次,添加sourceMapName 选项并指定生成的源映射的路径。
注意:生成的地图文件的位置现在设置为:
'build/my_map.map'
-
同样,在您的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']
}
}
},