Как заставить gulp-vulcanize игнорировать socket.io.js?

Один из моих .html файлов импортирует /socket.io/socket.io.js, я хочу вулканизировать этот файл, но игнорирую тег скрипта, который импортирует socket.io

Я написал следующую задачу gulp:

// vulcanize HTML files
var vulcanizeHtmlSrc = 'views/**/*.html',
    vulcanizeHtmlDst = 'build/views';
gulp.task('vulcanize', function() {
gulp.src(vulcanizeHtmlSrc)
    .pipe(vulcanize({
        excludes: ['//fonts.googleapis.com/*', '/socket.io/socket.io.js'],
        stripExcludes: false
    }))
    .pipe(gulp.dest(vulcanizeHtmlDst));    
});

Я все еще получаю следующую ошибку:

ERROR finding /socket.io/socket.io.js

Что я делаю не так?


person Karthik Balakrishnan    schedule 13.07.2015    source источник


Ответы (2)


// vulcanize HTML files
var vulcanizeHtmlSrc = 'views/**/*.html',
vulcanizeHtmlDst = 'build/views';
gulp.task('vulcanize', function() {
gulp.src(vulcanizeHtmlSrc)
    .pipe(vulcanize({
        excludes: ['//fonts.googleapis.com/*',
            './bower_components/polymer/polymer.html'
        ],
        stripExcludes: false,
        inlineScripts: true,
        inlineCss: true,
        implicitStrip: true,
        stripComments: true
    }))
    // pipe to injectString to add script tags that cause an issue with vulcanize
    // e.g. <script src="/socket.io/socket.io.js">
    // Error caused if the script is added in index.html itself
    // ERROR finding /socket.io/socket.io.js
    .pipe(injectString.before('<script class="usesSocket.io">', '<script src="/socket.io/socket.io.js"></script>\n'))
    .pipe(gulp.dest(vulcanizeHtmlDst));
});

Просто добавьте к тегу script класс, требующий socket.io.js, и вставьте socket.io.js с помощью модуля gulp-inject-string после вулканизации. Это немного хакерски. В любом случае, вулканизация по-прежнему вызывает много ошибок, и я рекомендую людям избегать Polymer (если разрабатываемое приложение готово к производству), пока оно не станет полностью стабильным и не будет иметь лучшую документацию.

person Karthik Balakrishnan    schedule 14.07.2015

Если вы предпочитаете хранить сценарии socket.io в исходном коде, вы также можете удалить эти сценарии, вулканизировать, а затем вставить сценарии обратно, как предлагает @Torcellite. Я использую начальные и конечные комментарии, чтобы выделить этот блок в HTML.

HTML

<!-- gulp:remove -->
<script src="/socket.io/socket.io.js"></script>
<!-- gulp:endremove -->

gulp.task

  // 1 - remove server scripts for vulcanization
  var start_comment = "gulp:remove",
      end_comment = "gulp:endremove",
      pattern = new RegExp("(\\<!--\\s" + start_comment + "\\s--\\>)(.*\\n)*(\\<!--\\s" + end_comment + "\\s--\\>)", "g");
  .pipe(require('gulp-tap')(function(file) {
      file.contents = new Buffer(String(file.contents).replace(pattern, ""));
  }))
  // 2 - pipe vulcanize...
  // 3 - pipe injectString back in...
person David Douglas    schedule 01.12.2015
comment
вулканизация труб - это не вулканизация файла из-под крана. - person 1Mayur; 10.08.2017