我有很多javascript文件,它们通过grunt uglify并逐个缩小,而且,我正在对这些文件进行grunt concat以获得带源映射的单个捆绑缩小文件。
前。
a.js,b.js,c.js
->
Uglify->
a.min.js,b.min.js,c.min.js->
concat->
bundle.min.js
使用dev工具和源映射,来自bundle.min.js,我只能追溯到a.min.js / b.min.js / c.min.js。 我的目标是使用源地图追溯到a.js / b.js / c.js。
答案 0 :(得分:2)
您的要求可以实现,但您需要将任务的顺序更改为以下内容:
a.js, b.js, c.js
-->
concat -->
bundle.js
-->
uglify -->
{ {1}}
注意:在 uglifying 结果输出之前,任务的顺序已更改为连接各个bundle.min.js
文件。
为什么需要更改任务的顺序?
由于grunt-contrib-uglify提供了sourceMapIn
选项,而grunt-contrib-concat却没有提供选项。除了 uglifying 之前连接文件的典型做法。
.js
选项描述如下:
<强> sourceMapIn 强>
输入:
sourceMapIn
默认值:
String Function
来自早期编辑的输入源地图的位置,例如来自CoffeeScript。如果提供了函数,则将uglify源作为参数传递,并将返回值用作sourceMap名称。这只有在有一个源文件时才有意义。
<强> Gruntfile.js 强>
您的undefined
可以配置如下:
Gruntfile.js
备注:强>
为module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.initConfig({
concat: {
options: {
// ...
sourceMap: true,
sourceMapName: 'dist/js/bundle.map' // Specify path/name for sourceMap
},
my_target: {
src: ['src/js/a.js', 'src/js/b.js', 'src/js/c.js'],
dest: 'dist/js/bundle.js',
},
},
uglify: {
options: {
// ...
sourceMap: {
includeSources: true
},
sourceMapIn: 'dist/js/bundle.map', // Specify the same path/name as
// the `sourceMapName` value
// in the `concat` task
},
my_target: {
files: {
'dist/js/bundle.min.js': ['dist/js/bundle.js']
}
}
}
});
// Note we run the `concat` task before the `uglify` task.
grunt.registerTask('default', ['concat:my_target', 'uglify:my_target']);
};
和concat.options.sourceMapName
指定的路径值必须相同,例如uglify.options.sourceMapIn
。
dist/js/bundle.map
任务必须在concat
任务之前运行。
这两项任务的uglify
和src
路径都需要根据您的项目要求进行定义。