Укажите входной каталог для Laravel Elixir/SASS

В настоящее время мой каталог resources/assets структурирован немного иначе, чем обычно, так как я хочу иметь несколько «тем» в своем проекте.

В настоящее время у меня есть следующие структуры:

resources/assets/theme-one/scss/*
resources/assets/theme-one/coffee/*

И

resources/assets/theme-two/scss/*
resources/assets/theme-two/coffee/*

Теперь я пытаюсь создать свой gulpfile.js с помощью Elixir (в настоящее время для темы-один), и я пытаюсь указать входной каталог для моих файлов SASS.

var elixir = require('laravel-elixir');

elixir(function(mix) {
    mix.sass(['app.scss'], 'public/theme-one/css/app.css');
});

Конечно, приведенный выше код по умолчанию будет просматривать каталог resources/assets/sass, но вместо этого я хочу указать ему искать в каталоге resources/assets/theme-one/scss.

Я пробовал всевозможные комбинации, чтобы попытаться заставить его работать, но кажется, что бы я ни пытался, Elixir/gulp-sass всегда пытается искать в resources/assets/sass, и я получаю File not found: resources\assets\sass\app.scss ошибок.

Я пробовал:

  • Добавление третьего параметра, указывающего входной каталог
  • Указание полного пути к файлу применительно к моему gulpfile.js т.е. resources/assets/theme-one/scss/app.scss
  • Переключение второго и третьего параметров
  • Копаемся в исходном коде (https://github.com/laravel/elixir/blob/master/tasks/sass.js и https://github.com/laravel/elixir/blob/master/GulpPaths.js), чтобы узнать, как указать входной каталог.
  • Префикс app.scss в параметре 1 с ./ и полным путем (из комментария и кода, начинающегося со строки 97 в GulpPaths.js, объясняющего, что префикс пути с ./ по существу пропускает префикс)

Мне вообще не везет. Любые идеи?

Единственное «решение», которое я мог бы придумать, — это изменить структуру моего проекта обратно на ту, которую хочет Эликсир, т. е. иметь resources/assets/sass/theme-one/app.scss и resources/assets/coffee/theme-one/app.coffee и т. д., но это не то, что я хочу делать. Если ничего не помогает, я могу просто собрать Эликсир и просто использовать gulp как есть.

Изменить

Теперь я попытался изменить элемент конфигурации assetsPath в моем gulpfile.js следующим образом:

var elixir = require('laravel-elixir');

elixir.config.assetsPath = "resources/assets/theme-one";
elixir.config.publicPath = "public/theme-one";

elixir(function(mix) {
    mix.sass(['app.scss']);
});

Я все еще получаю File not found: resources/assets/sass/app.scss


person Jonathon    schedule 04.03.2016    source источник


Ответы (1)


Вы можете переопределить конфигурацию по умолчанию Elixir (общедоступную и активную):

//in your gulp file : 
var elixir = require('laravel-elixir');

elixir.config.assetsPath = "resources/assets/theme-one";
elixir.config.publicPath = "public/theme-one";

elixir(function(mix) {
    mix.sass('app.scss');
});

elixir.config.assetsPath = "resources/assets/theme-two";
elixir.config.publicPath = "public/theme-two";

elixir(function(mix) {
    mix.sass('app.scss');
});

Осторожно, для более старых версий (до 3.0) Elixir вам необходимо переопределить конфигурацию вот так:

elixir.config.assetsDir = "resources/assets/theme-one";
elixir.config.publicDir = "public/theme-one";

Как указано в комментариях Jonathon

person shempignon    schedule 04.03.2016
comment
Спасибо за Ваш ответ. Я попробовал то, что вы предложили, и все еще получаю File not found: resources/assets/sass/app.scss. Я обновлю свой вопрос текущим gulpfile.js - person Jonathon; 04.03.2016
comment
Попробуйте с mix.sass('app.scss'); без скобок. У меня работает нормально - person shempignon; 04.03.2016
comment
Неважно, я обнаружил проблему. У меня должна быть более старая версия Эликсира. В моей конфигурации есть параметры assetsDir и publicDir, а не assetsPath и publicPath. Если вы обновите свой вопрос, упомянув эти два возможных варианта, я приму ваш ответ :) - person Jonathon; 04.03.2016
comment
Возможно, также стоит упомянуть, что мне нужно было поставить косую черту в конце пути. Кроме того, в дополнение к elixir.config.publicDir мне пришлось также установить elixir.config.cssOutput и elixir.config.jsOutput, чтобы заставить его работать так, как я этого хотел. - person Jonathon; 04.03.2016
comment
Спасибо за вашу помощь :) - person Jonathon; 04.03.2016