文件版本化

未匹配的标注

版本化

mix.js('src', 'output').version([]);

为了避免长期性的缓存问题, Laravel Mix 提供了 mix.version()  大法;该大法提供文件哈希,比如说: app.js?id=8e5c48eadbfdd5458ec6 。 这个对于破坏缓存十分有用。 如果你有一个脚本一年不更新,很自然你想要缓存它。但是,每次你修改它的代码时, 你需要告诉服务如何去破坏缓存。一般的做法是用查询字符或者文件哈希。
当版本化启用后,你文件更改的时候,一个新的哈希查询字符文件会被生成。比如说,以下是一个  webpack.mix.js 文件:

let mix = require('laravel-mix');

mix.js('resources/assets/js/app.js', 'public/js')
    .sass('resources/assets/sass/app.sass', 'public/css')
    .version();

编译的时候, 你会看到 /css/app.css?id=5ee7141a759a5fb7377a  和  /js/app.js?id=0441ad4f65d54589aea5 出现在 mix-manifest.json 文件里. 每个哈希都是举世独有的;每次你修改你的 Javascript 文件,其所编译的文件会得到一个全新的哈希。然后当你发布到生产环境时, 这个JavaScript对应的缓存也会被破坏掉。

举个栗子, 当你跑 webpack --watch 时,每次你修改代码时,你可以马上看到全新的打包文件和CSS。

导入版本化的文件

理想很美好,显示很残酷。如果这些版本号的文件名字一直修改, 那要怎么才能导入这些文件呢? 这个也是看情况的。比如说 SPA(单页程序), 你需要不断读取 Laravel Mix 所生成的  manifest.json  文件。然后找到你所有需要的文件名字 (JSON里面的格式是 { 文件名 :版本化名字} , 每次编译的时候,版本化名字都会改变), 然后编译成 HTML 。

Laravel 用户

对于 Laravel 的项目,这个答案更加简单。在HTML里导入 PHP 的 mix() 函数即可。例子如下:

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8" />
        <title>App</title>
        <link rel="stylesheet" href="{{ mix('css/app.css') }}" />
    </head>
    <body>
        <div id="app"><h1>你好,世界</h1></div>

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

把未版本化的文件路径放入  mix() 函数, Laravel 会自动找到其编译后的名字,然后导入 HTML 。 请注意, 就算你没有版本化你的文件,我们还是建议你用这个函数导入你的文件。

版本化额外文件

mix.version() 将自动对任何已编译的 JavaScript,Sass / Less 或组合文件进行版本控制。但是,如果您还想将额外文件作为构建的一部分进行版本化,只需将路径或路径数组传递给方法,如下所示:

mix.version(['public/js/random.js']);

现在,我们仍然会对任何相关的编译文件进行版本控制,但我们还会附加一个查询字符串,public/js/random.js?{hash},并更新你的 mix-manifest.json 文件。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel-mix/4.0...

译文地址:https://learnku.com/docs/laravel-mix/4.0...

上一篇 下一篇
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
贡献者:5
讨论数量: 0
发起讨论 只看当前版本


暂无话题~