「坐上时光机,查找编译压缩后的文件最初的样子」gulp-sourcemaps 使用说明
一般我们调试的 js/css 文件都是编译压缩后的,一旦出错很难定位原始的位置,gulp-sourcemaps 的出现帮助我们解决了这个问题。
首先我们看下目录结构:
css
js
a.js
b.js
sass
a.scss
b.scss
index.htm
gulpfile.js
package.json
我们的目标是 sass 文件夹中的两个文件合并压缩后,放入 css 文件夹中(命名为 main.min.css),js 文件夹中的两个文件合并压缩后,生成新的文件放在 js 文件夹中(命名为 main.min.js),然后 index.htm 页面引用新生成的两个文件。
我们分别从 css 和 js 的角度来介绍如何使用 gulp-sourcemaps。
css
// sass -> css
gulp.task('css', function() { // 任务名
return gulp.src('sass/*.scss') // 目标 sass 文件
.pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')}))
// // 因为我们的 "时光穿梭机" 希望能回退到 sass 文件,所以加在 sass() 前
.pipe(sourcemaps.init())
.pipe(sass()) // sass -> css
.pipe(gulp.dest('css'))
.pipe(minifyCss()) // 压缩 css
.pipe(concat('main.min.css')) // 合并 css,并命名叫 main.min.css
.pipe(sourcemaps.write())
.pipe(gulp.dest('css')) // 目标目录
});
注意它的两个 API,sourcemaps.write 一般会在 xx.min.css 输出前调用,而 sourcemaps.init 一般在 sass->css 编译前调用,比如 sass() 前调用,这表示最终生成的 xx.min.css 会回溯到 sass() 调用前,也就是 sass 文件中去寻找 "最初的样子"。

可以尝试将 sourcemaps.init 放到不同的地方,如果放到 sass() 后,那么最终会到 a.css 和 b.css 去寻找。

如果不用 "时光穿梭机",我们看到的源文件应该就是 main.min.css。
还有一个问题是,如果调用 sourcemaps.write 不给任何参数,不会生成一个 .map 的文件,而是会把映射加在生成的 css 文件中(我们可以打开 main.min.css 看看)。这样很不友好,我们可以给它加个参数,生成一个独立的 .map 文件:
.pipe(sourcemaps.write('')) // 路径,相对于下一步骤的相对路径,此处 main.min.css 和 main.min.css.map 在一个目录
这时我们再看 main.min.css 文件,后面只跟了一句话,这也是我们常用的方法。
/*# sourceMappingURL=main.min.css.map */
js
js 和 css 类似。
gulp.task('scripts', function() { // 这个任务的名称是 scripts
gulp.src('js/+(a|b).js') //
.pipe(sourcemaps.init()) // 我们希望出错能回溯到最原始的文件,也就是 a.js 和 b.js 中去寻找错误的原因
.pipe(concat('main.min.js')) // 指定合并并压缩后的文件名
.pipe(uglify()) // 压缩
.pipe(sourcemaps.write(''))
.pipe(gulp.dest('js'));
});
这个时候,如果错误源自 a.js,那么控制台报错,错误文件会指向 a.js。
更多内容可以参考官方文档 https://www.npmjs.com/package/gulp-sourcemaps
「坐上时光机,查找编译压缩后的文件最初的样子」gulp-sourcemaps 使用说明的更多相关文章
- 快压、360压缩、WinRAR关于打开快压通过超高压缩比压缩后的文件不兼容的问题
今天接收了同事发过来的一个压缩文件,用360压缩打开和用WinRAR打开压缩文件,傻眼了,这发的是什么鬼压缩包.压缩包的文件大小有27533KB,用360压缩工具解压查看只有121.5kb,而且完全没 ...
- VS2015 编译前/后拷贝文件到指定目录
项目属性 —> Build Events —>Pre-build / Post-build event command line 中: Copy 源路径 目标路径(将路径用 " ...
- html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题
先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html ...
- bootstrap-datetimepicker在经过GC(Google Closure Compiler)压缩后无法使用的解决方案
将压缩级别由simple改成whitespace 问题就是这样之后压缩后的文件大了很多 <?xml version="1.0"?> <project name=& ...
- bzip2 zip 压缩后体积比 0.8:1
1. 对.bz2 后缀文件 跳过不处理 2.逐行同字段的json文件,压缩后大小为原文件的12.81% 测试文件近似认为为逐行json文本数据,没有进行多文件重复测试,没有统计时间: {"u ...
- vue使用webpack压缩后体积过大要怎么优化
vue使用webPack压缩后存储过大,怎么优化 在生产环境去除developtool选项 在webpack.config.js中设置的developtool选项,仅适用于开发环境,这样会造成打包成的 ...
- Grunt: 拼接代码,js丑化(压缩),css压缩,html压缩,观察文件,拷贝文件,删除文件,压缩文件
准备工作 grunt 基于nodeJs所以 nodeJs需要的基础配置都需要安装 1.Grunt 安装 npm install -g grunt-cli 这是全局安装 2.在当前文件下npm init ...
- Linux命令(十八) 压缩或解压缩文件和目录 gzip gunzip
目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 和 zip 命令类似,gzip 用于文件的压缩,gzip压缩后的文件扩展名为 ".gz",gzip默认压缩后 ...
- gzip, gunzip, zcat - 压缩或展开文件
总揽 gzip [ -acdfhlLnNrtvV19 ] [-S 后缀] [ 文件名 ... ] gunzip [ -acfhlLnNrtvV ] [-S 后缀] [ 文件名 ... ] zcat [ ...
随机推荐
- 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- 理解CSS前景色和透明度
前面的话 颜色的出现让网页不再只是黑白,运用好颜色设计,能让网页增色不少.一个网页给人们留下的第一印象实际上就是它的整体颜色.关于如何设置颜色,请移步CSS的6种颜色模式.实际上,颜色的应用主要分为前 ...
- 【无私分享:ASP.NET CORE 项目实战(第十二章)】添加对SqlServer、MySql、Oracle的支持
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 增加对多数据库的支持,并不是意味着同时对多种数据库操作,当然,后面,我们会尝试同时对多种数据库操作,这可能需要多个上下文,暂且 ...
- 8个超棒的HTML5网站设计欣赏
我们听到了很多关于HTML5的新闻和技术动向,一个又一个的新的东西不停的出现,那么最近HTML5的技术应用又如何呢?HTML5又和CSS及其Javascript如何一起改变我们的网站设计和实现的呢? ...
- JSON字符串和对象 的转换
一 通过eval() 函数可以将JSON字符串转化为对象 var obj = eval('(' + str + ')'); 或者 var obj = str.parseJSON(); //由JSON ...
- 开发属于自己的yeoman脚手架(generator-reactpackage)
自从前后端开始分离之后,前端项目工程化也显得越来越重要了,之前写过一篇搭建基于Angular+Requirejs+Grunt的前端项目教程,有兴趣的可以点这里去看 但是有些项目可以使用这种方式,但有些 ...
- XTemplate语法基础
XTemplate 是富逻辑的 KISSY 模板引擎,面向复杂的业务逻辑场景,同时保持高性能和丰富的配置方法,是易学易懂的模板语言. 一个典型的XTemplate模板实例: Hello {{name} ...
- 将语音搜索集成到Google Now中
原文标题:Use Voice Search to integrate with Google Now 原文链接:http://antonioleiva.com/voice_search_google_ ...
- react-native DatePicker日期选择组件的实现
本教程的实现效果如下: 为了实现其淡入/淡出的覆盖效果, 还有取消按钮, 在此用了一个三方的组件, 大家可以先安装一下: 三方组件的地址:https://github.com/eyaleizenber ...
- android Animation介绍
Animation介绍: 在Android SDK介绍了2种Animation模式: 1. Tween Animation:间动画,通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果,即 ...