laravel - name - str_slug



Elixir versioning public path (2)

J'essaie d'utiliser la méthode version () d'Elixir avec mon dossier public 'public_html (au lieu de la méthode' public 'par défaut).

Je version mon fichier css, qui produit un dossier de construction avec le manifeste dans 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');

});

Dans mon modèle de lame j'utilise

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

Le problème est la recherche de la fonction elixir dans le dossier 'public / build'. Comment puis-je changer cela pour qu'il recherche dans le dossier public_html?

Merci d'avance


Answer #1

Il n'y a pas d'option dans elixir () pour changer le chemin public:

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

Il n'y a que peu d'options. Vous pouvez modifier le chemin public en l'ajoutant à App \ Providers \ AppServiceProvider

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

ou vous pouvez créer votre propre fonction d'élixir ou une classe d'aide

Exemple:

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

Ensuite, vous pouvez l'utiliser plus tard dans la vue:

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

Espérons que dans la future version de l'élixir, ce futur sera inclus. :)


Answer #2

Vous avez oublié d'écraser votre dossier publicDir dans le fichier gulpfile.js , cela pointe le dossier de build vers l'emplacement correct qui est utilisé par elixir pour déterminer le hachage de la version.

elixir.config.publicDir = 'public_html';

Après avoir fait cela, vous devez remplacer votre public_path dans Laravel, la manière recommandée pour Laravel 5 est d'aller à l' index.php dans votre dossier public:

Sous

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

Ajouter

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




laravel-elixir