何处使用Laravel Mix启用Https

时间:2017-07-27 00:51:35

标签: laravel https mix

为什么混合功能没有安全选项,就像资产功能一样?现在我只是复制了帮助器并编写了我自己的mix_secure函数,但我很惊讶没有其他人偶然发现了这个问题呢?可悲的是,资产功能没有缓存破坏...

任何想法/想法?

干杯,

罗宾

1 个答案:

答案 0 :(得分:2)

  

为什么混合功能没有像资产功能那样的安全选项?

由于mix()仅返回URI而非URL

因此,如果只在刀片模板中单独使用

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

它将呈现为

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

,浏览器将选择任何方案(HTTP或HTTPS)及其提供的域名。当您想要使用不同的方案提供资产时,我无法想到这种情况。如今,您希望通过HTTPS提供所有服务。

现在,如果您要构建资产的完整网址,则有两个内置函数asset()secure_asset(),这些函数完全符合其名称所暗示的内容:

>>> 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"
  

可悲的是,资产功能没有缓存破坏...

你再次看错了。 mix()负责URI而不是asset(),它将使用资产清单public/mix-manifest.json,它是在编译资产时生成的,以生成正确的路径。为了利用自动缓存清除,您需要在编译时使用laravel mix

对资产进行版本控制
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

然后在混合v1.0.0之前,资产的文件名将包含散列

/js/app-c5ac0d032c3d7fe2f10e.js

使用mix v1.0.0及更高版本,哈希现在位于查询参数

/js/app.js?id=c5ac0d032c3d7fe2f10e

进一步阅读Versioning / Cache Busting