2017-07-27 6 views
0

Pourquoi n'y a-t-il pas d'option sécurisée pour la fonction de mixage comme pour la fonction asset? Pour l'instant je viens de copier l'assistant et j'ai écrit ma propre fonction mix_secure mais je suis surpris que personne d'autre ne soit encore tombé dessus? Malheureusement, la fonction de l'actif n'a pas de cache ...Où activer Https avec Laravel Mix

Des idées, des idées?

Cheers,

Robin

+0

Pourquoi ne pas utiliser le contrôle de version pour le contournement du cache? – tompec

Répondre

1

Pourquoi est-il pas d'option sûre pour la fonction de mixage comme il est pour la fonction de l'actif?

Because mix() renvoie uniquement les URI par opposition à URL

Par conséquent, si utilisé par elle-même dans votre modèle de lame

<script src="{{ mix('js/app.js') }}"></script> 

Il rendra comme

<script src="/js/app.js?id=c5ac0d032c3d7fe2f10e"></script> 

et la navigateur va prendre n'importe quel régime (HTTP ou HTTPS) et th e nom de domaine à partir duquel il est servi. Je ne peux pas penser à une situation où vous voulez servir un actif avec un régime différent. De plus, de nos jours, vous voulez tout servir via HTTPS.

Maintenant, si vous voulez construire une URL complète à un actif il y a deux fonctions intégrées asset() et secure_asset() qui font exactement ce que leur nom l'indique:

 
>>> asset(mix('js/app.js')) 
=> "http://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e" 
>>> secure_asset(mix('js/app.js')) 
=> "https://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e" 

Malheureusement, la fonction de l'actif n'a pas cache busting ...

Encore une fois vous regardez ce problème. mix() est responsable de l'URI et non du asset() et utilisera le manifeste public/mix-manifest.json, généré lors de la compilation de vos actifs, pour générer un chemin correct. Afin de tirer parti de la cache automatique busting dont vous avez besoin à la version de vos actifs au moment de la compilation avec Laravel mélange

mix.js('resources/assets/js/app.js', 'public/js') 
    .sass('resources/assets/sass/app.scss', 'public/css') 
    .version(); // You need to version assets if you want automatic cache busting 

puis avant de mélanger v1.0.0 le nom d'un actif contiendrait le hachage

/js/app-c5ac0d032c3d7fe2f10e.js 

avec v1.0.0 mélange et le hachage est maintenant dans un paramètre de requête

/js/app.js?id=c5ac0d032c3d7fe2f10e 

Pour en savoir plus Versioning/Cache Busting

+0

Merci pour votre réponse. Intéressant mélange renvoie une URL complète pour moi et pas seulement l'URI (ce qui résoudrait en effet le problème). Et si je regarde le code source Laravel pour la fonction de mélange, la dernière ligne appelle réellement la fonction d'actif 'return new HtmlString (asset ($ ManifestDirectory. $ Manifeste [$ path])); C'est pourquoi j'ai construit un 'mix_secure' qui est une copie de la fonction de mélange mais qui a la dernière ligne avec l'indicateur sécurisé pour la fonction d'actif' return new HtmlString (asset ($ ManifestDirectory. $ Manifeste [$ path], true)); '.Cette solution fonctionne pour moi mais je suis surpris qu'il ne soit pas intégré!? – bobinrinder