Laravel Elixir - Невозможно использовать.version с css и несколькими js-файлами.

У меня проблемы с 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 ответа

Я сталкиваюсь с той же проблемой. Похоже, что 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'
    ])

});

Было 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']);
});

У меня также была проблема с версионированием, и я обнаружил, что в настоящее время существует ошибка с версионированием elixir. (примечание: на момент написания Elixir версия <= v0.14.0)

Похоже, что при объединении большого количества файлов (или, скорее всего, выходной файл большой), тогда он не будет версионирован с остальными файлами.

Похоже, вы можете бежать gulp version отдельно, и они получат версии. Если вы столкнулись с этой проблемой, то gulp или же gulp 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

Другие вопросы по тегам