更多gulp常用插件使用请访问:gulp常用插件汇总


gulp-sourcemaps这是一款用来生成映射文件的一个插件,SourceMap 文件记录了一个存储源代码与编译代码对应位置映射的信息文件。我们在调试时都是没办法像调试源码般轻松,这就需要 SourceMap 帮助我们在控制台中转换成源码,从而进行 debug。

gulp-sourcemaps在前端的工作中主要是用来解决以下三个方面出现的 debug 问题:

  1. 代码压缩混淆后
  1. 利用 sasstypeScript 等其他语言编译成 css 或 JS 后
  2. 利用 webpack 等打包工具进行多文件合并后

gulp-sourcemaps 目前支持三大类:

  • Generic
  • JS
  • CSS

更多使用文档请点击访问gulp-sourcemaps工具官网

安装

一键安装不多解释

npm install --save-dev gulp-sourcemaps

原理

实际上就是一个 JSON 键值对,利用 VLQ编码与特定的规则存储位置信息。

  {
    version : 3, //Source map的版本
    file: "out.js", //转换后的文件名
    sourceRoot : "", //转换前的文件所在的目录。如果与转换前的文件在同一目录,该项为空
    sources: ["foo.js", "bar.js"], //转换前的文件。该项是一个数组,表示可能存在多个文件合并
    names: ["src", "maps", "are", "fun"], //转换前的所有变量名和属性名
    mappings: "AAgBC,SAAQ,CAAEA" //记录位置信息的字符串
  }

使用

编写内联源映射到sourcemaps源文件中。

例如:

var gulp = require('gulp');
var plugin1 = require('gulp-plugin1');
var plugin2 = require('gulp-plugin2');
var sourcemaps = require('gulp-sourcemaps'); gulp.task('javascript', function() {
gulp.src('src/**/*.js')
.pipe(sourcemaps.init()) //标记 map 记录始发点
.pipe(plugin1()) //其他任务插件运行
.pipe(plugin2()) //其他任务插件运行
.pipe(sourcemaps.write()) //输出 .map 文件
.pipe(gulp.dest('dist'));
});

上面代码逻辑是会把 .map 的 JSON 变成数据流的形式写在该文件中,当你打开原文件时可以看到这样的一段注释:

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJhLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuXG5sZXQgeGlhb21pbmcgPSAneG0nXG5sZXQgemhhbmdzYW4gPSAnenMnXG5sZXQgbGlzaSA9ICdscydcbmxldCBmaXZlID0gJydcbmNvbnN0IGhhaGEgPSAxMFxuXG5mdW5jdGlvbiBhZGQoKXtcbiAgXG4gIGNvbnNvbGUubG9nKCdsb2cgYWRkIGZpdmUgLS0tLScsZml2ZSlcblxuICByZXR1cm4gZml2ZSA9IHpoYW5nc2FuICsgbGlzaVxufVxuXG5hZGQoKVxuY29uc29sZS5sb2coJ2xvZyBmaXZlIC0tLS0nLGZpdmUpXG5cbmZpdmUgKz0gaGFoYVxuXG5jb25zb2xlLmxvZygnbG9nIGZpdmUrKyAtLS0tJyxmaXZlKVxuXG5jb25zb2xlLmxvZygnYS5qcycpXG5cbiJdLCJmaWxlIjoiYS5qcyJ9

这段表明对应的 .map 文件地址,如果是数据流地址将会变成流字符串,这样我们就可以在 chrome 中打开调试啦

**gulp-sourcemaps API 详解 **

如上诉这种简单的 .map 使用方法是满足不了开发需求的。上面是一个压缩的需求,.map 应该分开,不能跟在源文件中,不然压缩后比压缩前都要大了。

  1. sourcemaps.init()
  2. sourcemaps.write()
  3. sourcemaps.mapSources()
  4. sourcemaps.identityMap()

sourcemaps.init()

如字面意思是 sourcemaps 的初始化 API ,其中的配置项:

sourcemaps.init({
loadMaps: true, //是否加载以前的 .map
largeFile: true, //是否以流的方式处理大文件
}
  • loadMaps

    设置为true以加载源文件的现有地图。支持以下内容:

    • 内联源地图
    • sourceMappingURL=注释引用的源地图文件
    • 同一目录中具有相同名称(加上.map)的源地图文件
  • identityMap

    不建议使用此选项。建议升级使用sourcemap.identityMap API。

sourcemaps.write()

sourcemaps. write( url , {option} ) 的输出配置 API

  • url

sourcemaps.write( 'maps' )填写相对于 gulpfile.js 的 url 地址,用于存放 .map 文件

  • {option}
sourcemaps.write('maps', {
addComment: false, //为源文件添加 .map 地址注释,当你设为 false 时则禁用注释(比如你想要通过 header 加载映射源)
includeContent:false, //默认情况下,源映射包括源代码,通过false来使用原始文件。推荐包含内容,因为它“有效”。设置为`false`时,您必须托管源文件并设置正确的`sourceRoot`。
sourceRoot: url , //配合上面的 includeContent:false ;指定原始文件位置。这通常是URL(或绝对URL路径),而不是本地文件系统路径。默认情况下,源根目录是'',或者在`destPath`设置了大小写的情况下,从源映射到源基本目录的相对路径(这在许多开发环境中都应适用)。如果使用相对路径(空字符串或以a开头.的路径),则将其解释为相对于目标的路径。该插件将其重写为相对于每个源映射的路径。
sourceRoot: function(file) {
return '/src'; //同时支持方法函数
},
destPath: url, //指定另外的输出地址,可以不靠 gulp.dist() 输出
sourceMappingURLPrefix: url , //在编写外部源映射时,指定前缀到源映射URL上,相对路径将把它们的主要点去掉(非常有用),也就是改变那个注释的 URL 前缀。
sourceMappingURL: function(file){ , //如果您需要完全控制源映射URL,您可以传递函数到此选项。函数的输出必须是源映射的完整URL(在输出文件的函数中)。
return ;
},
mapFile: function(mapFilePath) { //重名 .map 文件
// source map files are named *.map instead of *.js.map
return mapFilePath.replace('.js.map', '.map');
},
charset: utf8 , //指定编码格式
clone : {deep:false,contents:false} //克隆原始原件,并用克隆文件来创建映射文件,参数参照 file.clone()
})

sourcemaps.mapSources()

赋予更多定义 source path 的方式

sourcemaps.mapSources(function(sourcePath, file) {
return '../src/' + sourcePath; //为原文件地址提供前缀,该应该场景应该是,当你所使用的插件需要生产别的文件
})

sourcemaps.identityMap()

一个只为了 JS 和 CSS 能产生完整映射的 SourceMap ,相对于默认的空源 SourceMap 更能防止信息丢失。

gulp.task('javascript', function() {
var stream = gulp.src('src/**/*.js')
.pipe(sourcemaps.init())
// An identity sourcemap will be generated at this step
.pipe(sourcemaps.identityMap())
.pipe(plugin1())
.pipe(plugin2())
.pipe(sourcemaps.write('../maps')
.pipe(gulp.dest('public/scripts'));
});

gulp常用插件之gulp-sourcemaps使用的更多相关文章

  1. gulp常用插件之gulp-babel使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-babel这是Babel的Gulp插件. 此自述文件适用于gulp-babel v8 + Babel v7检查7.x分支以了解使用Bab ...

  2. gulp常用插件之gulp-postcss使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 ** gulp-postcss**这是一款通过多个插件通过管道传递CSS,但是仅解析一次CSS. 更多使用文档请点击访问gulp-postcss工 ...

  3. gulp常用插件之gulp-rev-collector使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-rev-collector这是一款根据gulp-rev生成的manifest.json文件中的映射, 去替换文件名称, 也可以替换路径. ...

  4. gulp常用插件之gulp-useref使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-useref这是一款可以将HTML引用的多个CSS和JS合并起来,减小依赖的文件个数,从而减少浏览器发起的请求次数.gulp-usere ...

  5. 精通gulp常用插件

    本文主要展示的是gulp常用插件的使用方法和用途,通过对插件的熟练运用达到精通gulp.不定期更新.可以到github上面下载DEMO. github地址:lin-xin/gulp-plugins 匹 ...

  6. node和gulp实现前端工程自动化(附:gulp常用插件)

    /** * 1. LESS编译 压缩 合并 * 2. JS合并 压缩 混淆 * 3. img复制 * 4. html压缩 */ // 在gulpfile中先载入gulp包,因为这个包提供了一些APIv ...

  7. gulp常用插件之gulp-eslint使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 ** gulp-eslint**这是一个用于识别和报告在ECMAScript/JavaScript代码中找到的模式的Gulp插件.. 更多使用文档 ...

  8. gulp常用插件之cssnano使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 cssnano这是一款将你的 CSS 文件做 多方面的的优化,以确保最终生成的文件 对生产环境来说体积是最小的插件. 更多使用文档请点击访问cha ...

  9. gulp常用插件之pump使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 pump这是一款小型节点模块,可将流连接在一起并在其中一个关闭时将其全部销毁. 使用标准source.pipe(dest)源时,如果dest发出关 ...

随机推荐

  1. 第2章 Java并行程序基础(三)

    2.8 程序中的幽灵:隐蔽的错误 2.8.1 无提示的错误案例 以求两个整数的平均值为例.请看下面代码: int v1 = 1073741827; int v2 = 1431655768; Syste ...

  2. Go语言实现:【剑指offer】二叉搜索树的第k个的结点

    该题目来源于牛客网<剑指offer>专题. 给定一棵二叉搜索树,请找出其中的第k小的结点.例如,(5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. Go语言实现: ...

  3. 转:JSON与Map互转

    JSON字符串与Map互转   //一.map转为json字符串 public static String map2jsonstr(Map<String,?> map){ return J ...

  4. golang中使用Shutdown特性对http服务进行优雅退出使用总结

    golang 程序启动一个 http 服务时,若服务被意外终止或中断,会让现有请求连接突然中断,未处理完成的任务也会出现不可预知的错误,这样即会造成服务硬终止:为了解决硬终止问题我们希望服务中断或退出 ...

  5. Keepalived 配置文件

    keepalived的配置文件: keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs.              全局定义及 ...

  6. Oracle 重启监听

    对于DBA来说,启动和关闭oracle监听器是很基础的任务,但是Linux系统管理员或者程序员有时也需要在开发数据库中做一些基本的DBA操作,因此了解一些基本的管理操作对他们来说很重要. 本文将讨论用 ...

  7. Javase-坦克大战小游戏,为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着

    //为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着 package TanKe.lbl;import java.awt.*;import java.awt.ev ...

  8. Leetcode:105. 从前序与中序遍历序列构造二叉树&106. 从中序与后序遍历序列构造二叉树

    Leetcode:105. 从前序与中序遍历序列构造二叉树&106. 从中序与后序遍历序列构造二叉树 Leetcode:105. 从前序与中序遍历序列构造二叉树&106. 从中序与后序 ...

  9. a链接四种伪类状态切换实现人机交互

    常见的color, font-family, background 等css属性都能够设置链接的样式,a链接的特殊性在于能够根据它们所处的状态来设置它们的样式.a标签与人交互的4个状态属于伪类状态切换 ...

  10. SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值?

    SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值? 最近在准备一个采购订单行项目的增强的function spec.其中有一段逻辑是取到采购订单行项目条件里某个指定的条件类 ...