2015-12-11 1 views
3

У меня есть файл машинописного текста users.ts в подкаталоге routes.Точка останова VSCode не работает в машинописном тексте с исходным кодом, сгенерированным gulp-sourcemaps

глотком код в 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('.')); 

sourcemap порождена gulp-sourcemaps не работает с VSCode:

{"version":3,"sources":["routes/users.ts"],"names":[], "mappings":"...","file":"routes/users.js","sourceRoot":""} 

sourcemap порождена tsc отлично работает в VSCode:

{"version":3,"file":"users.js","sourceRoot":"","sources":["users.ts"],"names":[], "mappings":"..."} 

и точка останова VSCode wo rks fine с исходной картой, созданной tsc.

Итак, как настроить gulp-typescript/gulp-sourcemaps для создания такой же исходной карты, как tsc?

+0

Что является '.js' окликнуть' трубы (ц (tsProject)) '? – admax

+0

см. Https://www.npmjs.com/package/gulp-typescript#source-maps, '.js' вызывается после' pipe (ts (tsProject)) – Smartkid

ответ

6

Это та же проблема, как и в Gulp Typescript + Browserify; Bundled sourcemap points to transpiled JS rather than source TS
Добавить функцию sourceRoot в sourcemaps.write(...)
Предполагая, что ваши .ts файлов находятся в src папки проекта, sourcemaps трубы будет выглядеть следующим образом:

.pipe(sourcemaps.write('.', { 
      sourceRoot: function(file){ return file.cwd + '/src'; } 
     })) 
+0

У меня такая же проблема, как и OP (также работает отлично с TSC сгенерированными исходными картами), к сожалению, это не решает проблему. – pyrho

+0

Подтверждено это работает. @pyrho Убедитесь, что часть '/ src' сопоставляется с корнем вашего проекта относительно корня вашего проекта. Возможно, вам придется использовать другие значения, такие как '' или '/ src/server' и т. Д. –

+0

Не могли бы вы разместить соответствующие биты вашего gulpfile.js и вашего макета проекта? Благодаря ! – pyrho

0

Sourcemap путь будет правильно на машине, где вы создаете их с помощью метода v-andrew. Тем не менее, если вы хотите скомпилировать sourcemaps раз работать на нескольких машинах, использовать относительные: Пути к файлам

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); 
    }, 
})) 
0

Я использую Глоток-sourcemaps 2.6.1 на Windows, и @ решение Westy92 не работает (больше ?), потому что file.path возвращает абсолютный путь к файлу (включая имя файла):

var path = require('path'); 

... 

.pipe(sourcemaps.write({ 
    includeContent: false, 
    sourceRoot: function(file) { 
    return path.relative(path.dirname(file.path), file.base); 
    }, 
}))