Laravel Elixir版本控制公共路径
我正在尝试使用Elixir的version()方法,我的“public”文件夹是public\u html(而不是默认的“public”方法) 我对css文件进行了版本设置,该文件生成了一个构建文件夹,其中包含public_html中的清单Laravel Elixir版本控制公共路径,laravel,laravel-5,blade,laravel-elixir,Laravel,Laravel 5,Blade,Laravel Elixir,我正在尝试使用Elixir的version()方法,我的“public”文件夹是public\u html(而不是默认的“public”方法) 我对css文件进行了版本设置,该文件生成了一个构建文件夹,其中包含public_html中的清单 elixir.config.cssOutput = 'public_html/css'; elixir.config.jsOutput = 'public_html/js'; elixir(function(mix) { mix.styles([
elixir.config.cssOutput = 'public_html/css';
elixir.config.jsOutput = 'public_html/js';
elixir(function(mix) {
mix.styles([
'vendor/normalize.css',
'app.css'
], null, 'public_html/css');
mix.version('public_html/css/all.css');
});
在我的刀片模板中,我使用
<link href="{{ elixir("css/all.css") }}" rel="stylesheet">
问题是elixir函数在“public/build”文件夹中搜索。如何更改此设置,使其搜索公共html文件夹
提前感谢您elixir()中没有更改公共路径的选项:
function elixir($file)
{
static $manifest = null;
if (is_null($manifest))
{
$manifest = json_decode(file_get_contents(public_path().'/build/rev-manifest.json'), true);
}
if (isset($manifest[$file]))
{
return '/build/'.$manifest[$file];
}
throw new InvalidArgumentException("File {$file} not defined in asset manifest.");
}
只有很少的选择。您可以通过将其添加到App\Providers\AppServiceProvider来更改公共路径
public function register()
{
$this->app->bind('path.public', function() {
return base_path().'/public_html';
});
}
或者您可以创建自己的elixir函数或帮助器类
例如:
function my_own_elixir($file,$path=public_path())
{
static $manifest = null;
if (is_null($manifest))
{
$manifest = json_decode(file_get_contents($path.'/build/rev-manifest.json'), true);
}
if (isset($manifest[$file]))
{
return '/build/'.$manifest[$file];
}
throw new InvalidArgumentException("File {$file} not defined in asset manifest.");
}
然后,您可以在以后的视图中使用此选项:
{{my_own_elixir('/css/all.css',$path='path to public_html')}}
希望在未来版本的长生不老药中包含此未来: 您忘记覆盖
gulpfile.js
文件中的publicDir文件夹,这将build
文件夹指向elixir用于确定版本哈希的正确位置
elixir.config.publicDir = 'public_html';
完成此操作后,必须覆盖Laravel中的公共路径,Laravel 5的建议方法是转到公用文件夹中的index.php
:
下面
$app = require_once __DIR__.'/../bootstrap/app.php';
加
你需要做的就是这个
var elixir = require('laravel-elixir');
elixir.config.publicDir = 'public_html';
elixir.config.publicPath = 'public_html';
有没有办法不改变elixir配置文件中的公共路径?我必须在/node_modules/laravel elixir/contracents/version.js中对其进行更改,然后它才能工作
elixir()
使用public_path()
因此您需要覆盖path.public
如post I linked中所示路径不是硬编码的,它使用全局配置的Laravelspublic_path
,这很有意义。而且它很容易被推翻。不需要编写自己的函数。(您也不必创建新的服务提供商,只需使用AppServiceProvider即可)谢谢,我已经找到了解决方案,但忘了更新此线程。无论如何谢谢你!我添加了这些行,但似乎并没有解决问题,它仍然会创建公共目录(而不是public_html),您还需要添加elixir.config.publicPath='public_html'
正如Lordcash所说的,现在的方法似乎是使用phpelixir
函数的第二个参数,例如elixir(“app.js”),默认值是build
。将其设置为空字符串“将其移回”到public
。。。或public\u html
。虽然此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的附加上下文可提高其长期价值。
var elixir = require('laravel-elixir');
elixir.config.publicDir = 'public_html';
elixir.config.publicPath = 'public_html';