Elixir版本公共路径

时间:2015-04-07 07:27:47

标签: laravel laravel-5 blade laravel-elixir

我试图使用Elixir的版本()方法与我的公共'文件夹是public_html(而不是默认的' public'方法)。

我的css文件版本,它生成一个build文件夹,其中包含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功能搜索&#39; public / build&#39;夹。如何更改此内容以便搜索public_html文件夹?

提前谢谢

3 个答案:

答案 0 :(得分:11)

您忘记覆盖gulpfile.js文件中的publicDir文件夹,这会将build文件夹指向elixir用来确定版本哈希值的正确位置。

elixir.config.publicDir = 'public_html';

执行此操作后,您必须覆盖Laravel中的public_path,Laravel 5的推荐方法是转到公用文件夹中的index.php

下边

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

添加

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

答案 1 :(得分:5)

你需要做的就是这个

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

答案 2 :(得分:1)

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';
        });
    }

或者您可以创建自己的灵丹妙药或辅助类

示例:

    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')}}

希望在未来版本的万能药中,这个未来将被包括在内。 :)