Глоток extname для файлов Angularjs2 с двумя точками

Задача переименования ниже хорошо работает для файлов angularjs2 с одной точкой, таких как appcomponent.ts. Однако, если имя файла имеет две точки, такие как login.service.ts, gulp extname будет сбит с толку и примет все, что будет после первой точки, в качестве расширения. Любая идея, как дать extname знать расширение после последней точки?

gulp.task('ts', function () {
  return gulp.src('src/**/*.ts')
    .pipe(rename({
      extname: ''
    }))
    .pipe(traceur({
      modules: 'instantiate',
      moduleName: true,
      annotations: true,
      types: true,
      memberVariables: true
    }))
    .pipe(rename({
      extname: '.js'
    }))
    .pipe(gulp.dest('build'));
});

1 ответ

Решение

gulp-rename заменяет только расширение после последней точки. Оно использует path.extname() внутренне о котором говорится в документации:

Возвратите расширение пути от последнего '.' до конца строки в последней части пути

Ваша проблема в этих трех строках:

.pipe(rename({
  extname: ''
}))

Здесь вы удалите .ts расширение, поэтому, когда вы, наконец, доберетесь до rename({extname: '.js'} расширение вашего файла на самом деле .service, Оставьте эти три строки, и ваше переименование работает.

Другие вопросы по тегам