在Laravel 5.4中混合/版本图像?

时间:2017-05-24 11:27:19

标签: laravel laravel-5 laravel-5.4

我想在一组图像上使用mix。首先我复制它们:

mix.copy('resources/images', 'public/images');

然后版本:

mix.version();

以上对图像没有任何作用。

我也尝试过指定路径:

mix.version('public/images/*');

但我得到一个没有这样的文件或目录错误。

如何对图像进行版本化?

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但是对于2019年-laravel mix 4,您可以使用:

mix.copy('resources/images/*', 'public/images');
mix.version();

这将对所有复制的文件进行版本控制。 请勿使用

mix.copy('resources/images/*', 'public/images/*'); 
mix.copy('resources/images/', 'public/images/*'); 
mix.copyDirectory('resources/images/*', 'public/images'); 

->然后将不对文件进行版本控制。

看到结果,看看public / mix-manifest.json:

"/favicon.ico": "/favicon.ico?id=ecb5fdce0172885513c8",

要在代码中使用它,请使用laravel混合帮助器方法:mix();

<link rel="icon" type="image/x-icon" href="{{ mix('favicon.ico') }}" />

这将生成如下内容:

<link rel="icon" type="image/x-icon" href="/favicon.ico?id=ecb5fdce0172885513c8" />

答案 1 :(得分:0)

version()(不带参数)不适用于传递给copy()copyDirectory()的文件。

如果您查看mix.version的来源,您会看到它同步扩展了glob。但是laravel-mixcopy等所有version操作都是异步执行的。这意味着public/images/*为空,因为public目录中还没有文件。

作为一种解决方法,您可以列出源目录中的文件(从中复制文件,例如resources),将resources路径段替换为public并将此列表传递给{{ 1}}。

在我的情况下,我在version()目录中有各种资源,因此目录树看起来像:

resources

我需要复制到- resources | - css | - fonts | - images | - js | - less 并版本除public之外的所有这些目录,我需要预处理它们以及版本。

这就像我的less看起来像:

webpack.mix.js

基本上我使用const mix = require('laravel-mix'), glob = require('glob'); mix.disableNotifications(); const directoriesToCopy = ['css', 'fonts', 'images', 'js'], publicDir = 'public/', publicCssDir = publicDir + 'css/', resourcesDir = 'resources/', resourcesLessDir = resourcesDir + 'less/', lessFiles = glob.sync('**/*.less', {cwd: resourcesLessDir}); directoriesToCopy.forEach(d => mix.copyDirectory(resourcesDir + d, publicDir + d)); lessFiles.forEach(f => mix.less(resourcesLessDir + f, publicCssDir + f.slice(0, -'less'.length) + 'css')); mix.version([].concat(...directoriesToCopy.map(d => glob.sync('**/*', {cwd: resourcesDir + d}).map(f => d + '/' + f))).map(f => publicDir + f)); 以递归方式获取每个复制目录中所有文件的列表,在其路径中将glob替换为resources,然后将所有此类文件的列表传递给{{ 1}}。