2015-04-07 12 views
8

Ich versuche Elixir Version() -Methode mit meinem 'öffentlichen' Ordner zu verwenden, der public_html ist (anstelle der Standardmethode 'public').Elixir Versionierung öffentlichen Pfad

I Version meiner CSS-Datei, die innerhalb 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'); 

}); 

In meiner Klinge Vorlage Ich benutze

ist
<link href="{{ elixir("css/all.css") }}" rel="stylesheet"> 

Problem die Elixier Funktion sucht in ‚public einen Build-Ordner mit dem Manifest erzeugt/Build 'Ordner. Wie kann ich dies ändern, so dass es den Ordner public_html durchsucht?

Vielen Dank im Voraus

+0

https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5 – lukasgeiter

+0

Jeder Weg, der nicht dem öffentlichen Weg in Elixier Config-Datei zu ändern ? Ich musste es in /node_modules/laravel-elixir/ingredients/version.js ändern, bevor es funktionieren würde! – Gregory

+0

'elixir()' verwendet 'public_path()' so müssen Sie 'path.public' überschreiben, wie in dem Beitrag gezeigt, den ich verknüpfte – lukasgeiter

Antwort

10

Sie haben vergessen, Ihren publicDir-Ordner in der gulpfile.js-Datei zu überschreiben, dies zeigt den Ordner build auf den korrekten Speicherort, der von Elixier verwendet wird, um den Versions-Hash zu bestimmen.

elixir.config.publicDir = 'public_html'; 

Nachdem Sie getan haben, dass Sie Ihre public_path in Laravel, der empfohlene Weg 5 für Laravel überschreiben müssen, ist auf die index.php in Ihrem öffentlichen Ordner zu gehen:

Underneath

$app = require_once __DIR__.'/../bootstrap/app.php'; 

hinzufügen
// set the public path to this directory 
$app->bind('path.public', function() { 
    return __DIR__; 
}); 
+0

Danke, ich habe die Lösungen schon gefunden aber vergessen diesen Thread zu aktualisieren. Danke trotzdem! – Gregory

+0

Ich habe diese Zeilen hinzugefügt, aber es scheint nicht das Problem zu beheben, es erstellt immer noch das öffentliche Verzeichnis (anstelle von public_html) – Roderik

+0

Sie müssen auch hinzufügen elixir.config.publicPath = 'public_html'; 'wie von Lordcash –

1

Es in Elixier keine Option ist() für den öffentlichen Weg ändernden:

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."); 
    } 

Es gibt nur wenige Optionen. Sie können durch das Hinzufügen dieser zu App \ Providers öffentlichen Pfad ändern \ AppServiceProvider

public function register() 
    { 
     $this->app->bind('path.public', function() { 
      return base_path().'/public_html'; 
     }); 
    } 

oder Sie können Ihre eigene Elixier Funktion oder eine Hilfsklasse

Beispiel erstellen:

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."); 
      } 

Dann Sie verwenden können, dies später im Blick:

{{my_own_elixir('/css/all.css',$path='path to public_html')}} 

Hoffentlich in Zukunft Version von Elixier diese Futur e wird enthalten sein. :)

+1

Der Pfad ist nicht * hardcoded * es verwendet Laravels global konfiguriert' public_path', was Sinn macht. Und es kann leicht außer Kraft gesetzt werden. Keine Notwendigkeit, eine eigene Funktion zu schreiben. (Sie müssen auch keinen neuen Dienstanbieter erstellen, sondern können einfach den AppServiceProvider dafür verwenden) – lukasgeiter

+0

@lukasgeiter danke Boss. Ich habe einige Korrekturen vorgenommen – Digitlimit

+0

Großartig!+1 dafür. – lukasgeiter

5

alles, was Sie tun müssen, ist dies

var elixir = require('laravel-elixir'); 
elixir.config.publicDir = 'public_html'; 
elixir.config.publicPath = 'public_html'; 
+0

Während dieser Code die Frage beantworten kann, verbessert einen zusätzlichen Kontext, warum und/oder wie dieser Code die Frage beantwortet, seinen langfristigen Wert. – JAL