【问题标题】:Laravel Elixir - Unable to use .version with css and multiple js filesLaravel Elixir - 无法将 .version 与 css 和多个 js 文件一起使用
【发布时间】:2015-04-08 10:45:03
【问题描述】:

我在使用 Laravel Elixir .version('xxxxxx.js') 时遇到问题。出于某种原因,我似乎无法将 .version 与 js 文件一起使用,或者在 .css 之外使用,甚至无法使用多个版本化的 js 文件。

elixir(function(mix) {

    /**
     * My Less
     */

    mix.less('app.less').version('public/css/app.css');

    /**
     * Vendor Scripts
     */

    mix.scripts([
        'jquery/dist/jquery.js'
    ], 'public/js/vendor.js', 'resources/assets/bower_components/').version('public/js/vendor.js');

    /**
     * My Scripts
     */

    mix.scripts(['app.js','app2.js'], 'public/js/app.js', 'resources/assets/scripts').version('public/js/vendor.js');

});

我的 laravel-elixir 配置如下:

var config = {
    production: !! util.env.production,
    srcDir: 'app',
    assetsDir: 'resources/assets/',
    cssOutput: 'public/css',
    jsOutput: 'public/js',
    bowerDir: 'resources/assets/bower_components',
    tasks: [],
    watchers: { default: {} },
    duplicate: [],
    concatenate: { css: [], js: [] }
};

【问题讨论】:

    标签: version gulp bower laravel-5 laravel-elixir


    【解决方案1】:

    我遇到了同样的问题。似乎version() 在每次调用时都会覆盖build 文件夹。

    您只需在所有文件的末尾调用一次version,如下所示:

    elixir(function(mix) {
    
        /**
         * My Less
         */
    
        mix.less('app.less')
    
        /**
         * Vendor Scripts
         */
    
        .scripts([
            'jquery/dist/jquery.js'
        ], 'public/js/vendor.js', 'resources/assets/bower_components/')
    
        /**
         * My Scripts
         */
    
        .scripts(['app.js','app2.js'], 'public/js/app.js', 'resources/assets/scripts')
    
        /**
         * My Versioning
         */
        .version([
            'public/css/app.css',
            'public/js/vendor.js', // BTW you are calling version twice on this file
            'public/js/app.js'
        ])
    
    });
    

    【讨论】:

    • 当我有几个供应商脚本要连接时,这对我不起作用。它似乎正在异步处理 .version,因此在调用 .version 之前连接尚未完成。
    • 将答案更改为链接所有方法。
    【解决方案2】:

    我的问题有 2 个问题,BeS 的解决方案确实有效,但是当我连接多个供应商文件时又产生了另一个问题:

    1. mix.less 和 mix.scripts 是异步调用的。我是在程序上考虑的。
    2. 正如@BeS 所说,我需要在最后调用一次版本。

    我的解决方案 - BeS 解决方案的组合,但经过修改以链接方法,确保所有脚本和更少等...在调用 .version 之前已连接:

    elixir(function(mix) {
    
        mix.less('app.less')
            .scripts([
               'jquery/dist/jquery.js',
               'other.js',
               'another.js'
            ], 'public/js/vendor.js','resources/assets/bower_components/')
            .scripts(['app.js','app2.js'], 'public/js/app.js', 'resources/assets/scripts')
            .version(['public/css/app.css', 'public/js/app.js', 'public/js/vendor.js']);
    });
    

    【讨论】:

    • 所以本质上是一样的。我总是将所有方法链接起来,因此我没有考虑并发执行,而是希望尽可能接近您的原始代码。并发执行是一个开放,在其他情况下也是有问题的。很高兴它有帮助。
    • 顺便说一句。我已经更正了答案,以免混淆可能过来的人。
    【解决方案3】:

    我也遇到了版本问题,发现目前有一个bug with elixir versioning(注意:在撰写本文时,Elixir 版本

    看起来当连接很多文件(或者更可能是输出文件很大)时,它不会与其余文件一起进行版本控制。

    看起来您可以单独运行gulp version,它们将获得版本控制。如果您遇到此问题,那么 gulpgulp watch 将不会这样做。

    这是我的 gulp 文件,vendor.js 正在编译但没有版本控制。它甚至不是最后一个被版本控制的文件:

    var elixir = require('laravel-elixir');
    
    elixir(function(mix) {
    
        mix.sass('app.scss')
    
        .scripts([
            'react/react-with-addons.min.js',
            'jquery/dist/jquery.min.js',
            'bootstrap-sass-official/assets/javascripts/bootstrap.js'
        ], 'public/js/vendor.js', 'resources/assets/bower')
    
        .scripts(['app.js'], 'public/js/app.js', 'resources/assets/js')
    
        .version([
            'css/app.css',
            'js/vendor.js',
            'js/app.js'
        ]);
    
    });
    

    之后运行gulp version 将对其进行版本化。

    更新:

    这似乎已修复 >= v0.14.2

    【讨论】:

    • 还是有这个问题。还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 2015-10-25
    • 1970-01-01
    • 2016-06-17
    • 2016-06-25
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多