Css 资产管理-在连接和版本控制后维护对相对资产的引用

Css 资产管理-在连接和版本控制后维护对相对资产的引用,css,laravel-5,asset-management,laravel-elixir,Css,Laravel 5,Asset Management,Laravel Elixir,我知道L5和Elixir仍在开发中,但我很高兴开始考虑重新组织代码的方法。在L5和Elixir的背景下,我认为我的问题更多地与资产管理有关 想澄清应该如何处理连接和版本控制(在我的例子中,我使用Elixir的styles()和version())。我遇到的问题是,concat/version之后的新文件将位于一个新文件夹中,打破了原始css或js文件中对资产的任何引用 例如,具有背景图像:url('../img.png')的原始CSS文件将不再工作。我尝试了两种方法,但都不理想,尤其是在供应商插

我知道L5和Elixir仍在开发中,但我很高兴开始考虑重新组织代码的方法。在L5和Elixir的背景下,我认为我的问题更多地与资产管理有关

想澄清应该如何处理连接和版本控制(在我的例子中,我使用Elixir的
styles()
version()
)。我遇到的问题是,concat/version之后的新文件将位于一个新文件夹中,打破了原始css或js文件中对资产的任何引用

例如,具有
背景图像:url('../img.png')
的原始CSS文件将不再工作。我尝试了两种方法,但都不理想,尤其是在供应商插件的情况下:

  • 将所需的资产逐个移动到新的构建路径(即Elixir版本控制使用的构建路径)上(对每个资产文件夹使用mix.copy())
  • 手动编辑每个资源文件中的路径以引用绝对路径
  • 虽然这两种选择都能让事情顺利进行,但我觉得我可能遗漏了一些东西。当使用javascript插件(例如,带有自己的图像、字体、样式表等的插件)时,它也变得非常不切实际


    在连接和版本控制时,是否有更实用的方法来管理相对路径?

    它们是相对路径-因此请保持相对关系

    只需将图像移动到
    public/build/
    目录中,作为
    gulp
    命令的一部分,在视觉化之后。

    编辑:

    我刚刚向Elixir提交了一份申请,所以你可以:

    mix.version(
        ['css/style.css', 'css/vendor/style.css'], //files to be versioned
        ['fonts', 'css/vendor/icons'] //dependent files/dirs to be copied
    );
    

    旧答案:

    实际上,如果您单独使用
    mix.copy(…)
    ,就不能使用
    gulpwatch
    ,您需要重新编译整个堆栈才能使其正常工作

    您可以使用下面的解决方案获得相同的结果,并且不需要重新编译所有内容,因为当您更改版本化文件时,它只会起作用:

    var shell = require('gulp-shell');
    
    gulp.task('cp', shell.task(['cp -R public/fonts public/build/',
                                'cp -R path/to/vendor/dir public/build/vendor/',
                                '... etc ...']));
    
    elixir(function(mix) {
    
        ...
    
        //register a watcher to run 'cp' when you rebuild
        mix.task('cp','public/build/**/*.(js|css)');
    
    }
    

    以下是构建版本控制后的Laravel Elixir解决方案。 对于“复制”命令,需要将其引用为完整路径

    var elixir = require('laravel-elixir');
    
    /*
     |--------------------------------------------------------------------------
     | Elixir Asset Management
     |--------------------------------------------------------------------------
     |
     | Elixir provides a clean, fluent API for defining some basic Gulp tasks
     | for your Laravel application. By default, we are compiling the Less
     | file for our application, as well as publishing vendor resources.
     |
     */
    
    elixir(function(mix) {
        mix.version('themes/default/assets/css/styles.css')
            .copy('public/themes/default/assets/img/', 'public/build/themes/default/assets/img/');
    });
    

    我想这就是我在第1点中所说的“手动”的意思。例如,我目前正在运行mix.copy()将每个文件夹从我的资源复制到public/build。不知是否有更好的解决方案?不幸的是,版本任务会删除除版本控制之外的文件夹…:/@KarolFiturski这就是为什么我们将其作为gulp命令的一部分复制到gulpfile.js中,而不是手动复制它们。据我所知,提拉请求从未合并,因此建议使用mix.copy,如果您想使用Laravel Elixir(mix)复制文件,请参阅下面的答案。