gulp-sourcemaps
1
|
$ npm install gulp-sourcemaps
|
我們可以使用 gulp-sourcemaps 套件生成 SourceMap 文件,不需要下載其他相依套件,開箱即可使用。
初始專案結構:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
gulp-demo/ │ ├─── node_modules/ ├─── source/ │ │ │ └─── scss/ │ │ │ └─── base │ │ │ └─── _reset.scss │ │ │ └─── component │ │ │ └─── _button.scss │ │ │ └─── helpers │ │ │ └─── _variables.scss │ │ │ └─── layout │ │ │ └─── _footer.scss │ │ │ └─── all.scss # SCSS 主檔案 │ ├─── gulpfile.js # Gulp 配置檔案 ├─── package-lock.json └─── package.json # 安裝 gulp、gulp-sass、gulp-sourcemaps
|
./source/scss/all.scss
載入所有組件:
1 2 3 4 5 6 7 8 9 10 11
|
@import 'base/reset';
@import 'helpers/variables';
@import 'component/button';
@import 'layout/footer';
|
載入並使用 gulp-sourcemaps:
1 2 3 4 5 6 7 8 9 10 11 12
|
const gulp = require('gulp'); const sass = require('gulp-sass'); const sourcemaps = require('gulp-sourcemaps');
gulp.task('sass', function() { return gulp .src('./source/scss/*.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('public/css')); });
|
執行指定任務:
生成
./public/css/all.css
和
./public/css/all.css.map
檔案,開啟 DevTool 工具並觀察 sourcemap 是否映射成功:
從上圖可以發現,各元素映射的 Style 路徑從原本的 all.css 改為尚未編譯的 .scss 路徑,這樣的結果也就代表 sourcemap 映射成功,相同的原理也可套用在其他檔案類型身上,下面會再做補充。
sourcemap Options
可傳遞參數列表,以下為常用的參數配置:
sourceMappingURLPrefix:
String
設定映射源的前綴,默認為
none
1 2 3 4 5 6 7 8 9 10 11 12
|
gulp.task('sass', function() { return gulp .src('./source/scss/*.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe( sourcemaps.write('./', { sourceMappingURLPrefix: 'scss', }) ) .pipe(gulp.dest('public/css')); });
|
gulp-concat
、
jquery
、
bootstrap
gulp-concat:
1
|
$ npm install gulp-concat
|
jquery:
bootstrap:
1
|
$ npm install bootstrap
|
此次範例會結合 jquery 與 bootstrap 一起使用,說明如何使用 gulp-concat 合併檔案並生成 sourcemap。
載入並使用 gulp-concat:
1 2 3 4 5 6 7 8 9 10 11 12
|
gulp.task('vendorsJs', () => { return gulp .src([ './node_modules/jquery/dist/jquery.slim.min.js', './node_modules/bootstrap/dist/js/bootstrap.bundle.min.js', './source/js/all.js', ]) .pipe(sourcemaps.init()) .pipe(concat('vendors.js')) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('./public/js')); });
|
執行指定任務:
生成
./public/js/vendors.js
和
./public/js/vendors.js.map
檔案,開啟 DevTool 工具並觀察 sourcemap 是否映射成功:
從上圖可以發現,頁面映射的 JavaScript 路徑從原本的 vendors.css 改為尚未編譯的各獨立檔案路徑,這樣的結果也就代表 sourcemap 映射成功。
從前面的幾個範例可以發現,sourcemap 的生成主要是利用
sourcemaps.init()
與
sourcemaps.write()
來完成,前者用來初始化,建議放置在第一個 pipe 節點,後者用來寫入 sourcemap,建議放在輸出文件的前一個 pipe 節點;事實上,gulp-sourcemaps 支援非常多種類型檔案生成 sourcemap,查詢檔案類型是否支援可參考下面連結:
支援列表:
Plugins with gulp sourcemaps support