[英]VSCode breakpoint not working in typescript with sourcemap generated by gulp-sourcemaps
我在子目錄routes
有一個打字稿文件users.ts
.
gulpfile.js
中的gulpfile.js
代碼:
var tsProject = ts.createProject(tsConfigFile);
return tsProject.src()
.pipe(sourcemaps.init())
.pipe(ts(tsProject))
.js
.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''}))
.pipe(gulp.dest('.'));
gulp gulp-sourcemaps
sourcemaps生成的gulp-sourcemaps
不適用於VSCode:
{"version":3,"sources":["routes/users.ts"],"names":[], "mappings":"...","file":"routes/users.js","sourceRoot":""}
tsc
生成的源圖在VSCode中工作正常:
{"version":3,"file":"users.js","sourceRoot":"","sources":["users.ts"],"names":[], "mappings":"..."}
VSCode斷點與tsc
生成的源映射一起正常工作。
那么如何配置gulp-typescript/gulp-sourcemaps
來生成與tsc
相同的源圖?
這與Gulp Typescript + Browserify中的問題相同; 捆綁的源映射指向轉換JS而不是源TS
將sourceRoot函數添加到sourcemaps.write(...)
假設您的.ts
文件位於項目的src
文件夾中, sourcemaps
管道將如下所示:
.pipe(sourcemaps.write('.', {
sourceRoot: function(file){ return file.cwd + '/src'; }
}))
源代碼路徑在使用v-andrew方法構建它們的機器上是正確的。 但是,如果要編譯源映射一次以在多台計算機上工作,請使用相對文件路徑:
var path = require('path');
...
.pipe(sourcemaps.write('.', {
includeContent: false,
sourceRoot: function(file) {
var fullPath = path.join(file.cwd, file.path);
return path.relative(fullPath, file.base);
},
}))
我在Windows上使用gulp-sourcemaps 2.6.1,@ Westy92的解決方案不起作用(不再?),因為file.path返回絕對文件路徑(包括文件名):
var path = require('path');
...
.pipe(sourcemaps.write({
includeContent: false,
sourceRoot: function(file) {
return path.relative(path.dirname(file.path), file.base);
},
}))
接受的答案是正確的,但是我花了一些時間才意識到為什么這有效以及如何調整我的特定環境的答案(在我的情況下我需要刪除/src
后綴)。
如果檢查生成的源映射(這僅在輸出到映射文件時有效,例如sourcemaps.write('.')
),您應該在json對象中看到兩個字段: sources
和sourceRoot
,有兩件事你需要確定的:
sourceRoot
應該是一個絕對路徑。 sources
每個路徑都應與sourceRoot
組合以形成源文件的絕對路徑。 如果#1不成立,則路徑在某些情況下會起作用而在其他情況下不起作用(某些工具會解析相對於源映射文件的相對路徑,其他工具則基於工作區根目錄,cwd或其他路徑)。
如果#2不成立,您的工具將在錯誤的位置查找源文件。
另一個提示:請記住,更改gulpfile不會觸發重新運行監視模式或清除任何文件緩存,因為源文件沒有更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.