文件版本化
版本化
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
文件。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: