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

Приведенная ниже задача переименования gulp хорошо работает для файлов angularjs2 ts с одной точкой, таких как 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'));
});

person Hammer    schedule 26.04.2016    source источник
comment
Если этот вопрос касается Angular2, у него не должно быть тега angularjs.   -  person Günter Zöchbauer    schedule 26.04.2016


Ответы (1)


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

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

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

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

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

person Sven Schoenung    schedule 26.04.2016