2016-03-01 49 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

謝謝。像魅力一樣工作。 –