4

我正在尝试将 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>

有人有什么想法吗?

4

2 回答 2

8

我写了一个插件,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 失败(无论出于何种原因)时您的页面仍然有效。

于 2014-03-19T19:13:23.243 回答
0

我用于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')));

替换位置:

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;
    }
  }
于 2018-12-28T17:47:10.900 回答