Включить источники CDN в gulp-inject

Я пытаюсь получить CDN и другие HTTP-ресурсы в скрипт, который модифицируется gulp-inject.

Я создал соответствующую проблему в хранилище.

Суть в том, что я хотел бы, чтобы что-то вроде этого работало:

var sources = [
  "http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js",
  "./spec/test.js"
]

gulp.task('source', function () {
   gulp.src("src/my.html")
       .pipe(inject(sources))
       .dest("dest/")
})

С таким результатом является следующее, включенное в dest/my.html:

<script src='http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js'>
</script>
<script src='/spec/test.js'></script>

У кого-нибудь есть мысли?

1 ответ

Решение

Я написал плагин, gulp-cdnizer Специально, чтобы помочь в этой ситуации.

Он разработан, чтобы позволить вам сохранять все ваши источники CDN локальными во время разработки, а затем заменять локальный путь на путь CDN при сборке дистрибутива.

По сути, вы устанавливаете свои скрипты вендора, используя bower или просто копируете и вставляете, и внедряете их в свой HTML, используя локальный путь. Затем представьте результаты gulp-inject в gulp-cdnizer и он заменит локальные пути на путь CDN.

gulp.task('source', function () {
   return gulp.src("src/my.html")
       .pipe(inject(sources)) // only local sources
       .pipe(cdnizer([
           {
               package: 'jasmine',
               file: 'bower_components/jasmine/jasmine.js',
               cdn: 'http://cdnjs.cloudflare.com/ajax/libs/jasmine/${version}/jasmine.js'
           }
       ])
       .dest("dest/")
});

Мне нравится делать это намного лучше, потому что вы все еще можете разрабатывать в автономном режиме. Библиотека cdnizer также может обрабатывать локальные резервные копии, которые гарантируют, что ваша страница все еще работает, если CDN выходит из строя (по любой причине).

Я использовал gulp-replace для аналогичного варианта использования:

HTML:

<!-- replace:google-places -->

глоток:

return gulp.src(path.join(conf.paths.src, '/*.html'))
    .pipe($.inject(injectStyles, injectOptions))
    .pipe($.inject(injectScripts, injectOptions))
    .pipe($.replace('<!-- replace:google-places -->', replacePlaces))  // <-- gulp-replace
    .pipe(wiredep(_.extend({}, conf.wiredep)))
    .pipe(gulp.dest(path.join(conf.paths.tmp, '/serve')));

replacePlaces:

const replacePlaces = match => {
    switch (process.env.NODE_ENV){
      case 'dev':
        return '<script src="https://maps.googleapis.com/maps/api/js....."></script>';
      case 'production':
        return '<script src="https://maps.googleapis.com/maps/api/js......"></script>';
      default:
        return match;
    }
  }
Другие вопросы по тегам