Laravel Elixir - 无法使用.version和css以及多个js文件

时间:2015-02-08 17:42:09

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

我遇到了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: [] }
};

3 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。似乎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'
    ])

});

答案 1 :(得分:1)

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

  1. mix.less和mix.scripts是异步调用的。我在程序上考虑它。
  2. 正如@BeS所提到的,我需要在最后调用一次版本。
  3. 我的解决方案 - 结合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']);
    });
    

答案 2 :(得分:1)

我也遇到版本控制问题,发现目前有bug with elixir versioning(注意:在撰写本文时,Elixir版本< = v0.14.0)

看起来在连接大量文件时(或者更可能是输出文件很大),然后它将不会使用其余文件进行版本化。

看起来你可以单独运行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