Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel Elixir版本控制公共路径_Laravel_Laravel 5_Blade_Laravel Elixir - Fatal编程技术网

Laravel Elixir版本控制公共路径

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的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([
        '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中所示路径不是硬编码的,它使用全局配置的Laravels
public_path
,这很有意义。而且它很容易被推翻。不需要编写自己的函数。(您也不必创建新的服务提供商,只需使用AppServiceProvider即可)谢谢,我已经找到了解决方案,但忘了更新此线程。无论如何谢谢你!我添加了这些行,但似乎并没有解决问题,它仍然会创建公共目录(而不是public_html),您还需要添加
elixir.config.publicPath='public_html'
正如Lordcash所说的,现在的方法似乎是使用php
elixir
函数的第二个参数,例如
elixir(“app.js”),默认值是
build
。将其设置为空字符串“将其移回”到
public
。。。或
public\u html
。虽然此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的附加上下文可提高其长期价值。
var elixir = require('laravel-elixir');
elixir.config.publicDir = 'public_html';
elixir.config.publicPath = 'public_html';