2016-03-01 62 views
0

我想通过gulp(gulp-google-cdn)运行google-cdn插件来将我的HTML文件中的bower引用转换为CDN等价物。咕嘟咕嘟 - 谷歌-CDN没有做任何事情,并启用调试,显示:google-cdn Could not find satisfying version for angular-material ^1.0.5谷歌CDN不改变路径CDN离开它在bower_components

我的任务(我用一个子目录,每个文件的任务):

gulp.task('HTML:Release', function() { 
    return gulp.src('../src/*.html') 
     .pipe(googleCdn(require('../bower.json'))) 
     .pipe(gulp.dest('../dist/')) 
    ; 
}); 

HTML:

<!DOCTYPE html> 
<html ng-app="OntarioDarts" ng-cloak lang="en"> 
<head> 
</head> 
<body layout="row" ng-cloak> 
    <div layout="column" class="relative" layout-fill role="main"> 
     <md-content flex md-scroll-y> 
      <ng-view></ng-view> 
     </md-content> 
    </div> 
</body> 


<!-- Load JavaScript Last for Speed. Load from CDN for cache speed --> 
<!-- Angular JS --> 
<script src="bower_components/angular/angular.js"></script> 
<script src="bower_components/angular-material/angular-material.min.js"></script> 
<script src="bower_components/angular-material-icons/angular-material-icons.min.js"></script> 

分发文件没有指向CDN的Angular,但仍尝试使用bower_components,即使它没有抱怨文件不是找到。

我发现的一个问题是,我在我的bower.json中将Angular设置为^ 1.5.0。但是,我只使用默认的Google CDN,目前它尚未提供1.5.0版本。我将bower.json文件中的版本更改为^ 1.4.0,然后将该文件更改为使用版本为1.4.7的CDN。

的问题是,虽然参考并没有得到改变到https://,而仅仅保留为src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"

回答

1

咕嘟咕嘟,谷歌-CDN没有做任何事情,并启用调试,显示: google-cdn Could not find satisfying version for angular-material ^1.0.5

这是因为最新版本可从谷歌CDN is 1.0.4

的问题是,虽然参考没有得到改变到https://,而仅仅保留为src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"

这不一定是一个问题。这是一个protocol-relative URL。如果您的页面通过HTTP提供,则通过HTTP提取angular.min.js。如果您的页面通过HTTPS提供,则通过HTTPS提取angular.min.js

除非您绝对需要angular.min.js始终通过HTTPS获取,否则您可以将其保留。

编辑: ...除了当你试图在浏览器中打开本地HTML文件。那么你的协议是file://和协议相对URL将引用你的本地文件系统。当然哪个地方不通。

修复此问题的一种方法是通过本地运行的网络服务器为您的html文件提供服务(例如gulp-webserver)。当你的HTML页面来自例如http://localhost:8000/所有的协议相对URL也将在http://以上。

如果你只是希望所有的CDN的URL与https://前缀相反,这里的包裹google-cdn-data对象来实现这样的方法:你需要运行npm install --save-dev google-cdn-data jsonpath这个工作

var gulp = require('gulp'); 
var googleCdn = require('gulp-google-cdn'); 
var jp = require('jsonpath'); 

function protocol(proto, cdn) { 
    jp.apply(cdn, '$.*.url', function(url) { 
     return function(version) { 
      return proto + url(version); 
     }; 
    }); 
    return cdn; 
} 

gulp.task('HTML:Release', function() { 
    return gulp.src('../src/*.html') 
     .pipe(googleCdn(require('./bower.json'), { 
      cdn: protocol('https:', require('google-cdn-data')) 
     })) 
     .pipe(gulp.dest('../dist/')); 
}); 

+0

感谢您的反馈意见。我发现版本问题,并更新了我的问题,因为CDN并不是最新的。我的问题是在我的开发环境中运行,其中src =“// ...”不起作用。我收到一个浏览器错误,并且这些文件没有加载。 –

+0

我编辑了我的答案。希望这可以帮助。 –

+0

谢谢。像魅力一样工作。 –