Laravel 5.4中的混合/版本图像?
我想在一组图像上使用mix。首先,我复制它们:Laravel 5.4中的混合/版本图像?,laravel,laravel-5,laravel-5.4,Laravel,Laravel 5,Laravel 5.4,我想在一组图像上使用mix。首先,我复制它们: mix.copy('resources/images', 'public/images'); 然后版本: mix.version(); 以上内容对图像没有任何影响 我还尝试指定路径: mix.version('public/images/*'); 但我得到一个没有这样的文件或目录错误 如何对图像进行版本设置?version()(无参数)不应用于传递到copy()和copyDirectory()的文件 如果您查看mix.version的源代码,
mix.copy('resources/images', 'public/images');
然后版本:
mix.version();
以上内容对图像没有任何影响
我还尝试指定路径:
mix.version('public/images/*');
但我得到一个没有这样的文件或目录错误
如何对图像进行版本设置?version()
(无参数)不应用于传递到copy()
和copyDirectory()
的文件
如果您查看mix.version
的源代码,就会发现它同步扩展了glob。但是所有的laravelmix
操作,例如copy
和version
都是异步执行的。这意味着public/images/*
为空,因为public
目录中还没有文件
作为一种解决方法,您可以列出源目录中的文件(从中复制文件,例如资源
),将资源
路径段替换为公共
,并将此列表传递到版本()
在我的例子中,我在resources
目录中有各种资产,所以目录树看起来像:
- resources
| - css
| - fonts
| - images
| - js
| - less
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));
我需要复制到public
并对所有这些目录进行版本设置,但less
除外,我需要对其进行预处理并进行版本设置
这就像我的webpack.mix.js
看起来像:
- resources
| - css
| - fonts
| - images
| - js
| - less
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
替换为public
,然后将所有此类文件的列表传递给mix.version
我知道这是一个老问题,但对于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助手方法:mix()
这将产生如下结果:
<link rel="icon" type="image/x-icon" href="/favicon.ico?id=ecb5fdce0172885513c8" />
你知道如何解决这个问题吗?@BitByBit请看下面我的答案。