我想在一组图像上使用mix。首先我复制它们:
mix.copy('resources/images', 'public/images');
然后版本:
mix.version();
以上对图像没有任何作用。
我也尝试过指定路径:
mix.version('public/images/*');
但我得到一个没有这样的文件或目录错误。
如何对图像进行版本化?
答案 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-mix
和copy
等所有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}}。