Слияние и компиляция файлов SCSS рекурсивно с использованием сценария оболочки в Windows - PullRequest
0 голосов
/ 21 октября 2018

Итак, вот ситуация.В настоящее время у меня есть проект со следующей структурой папок:

-- public_html
   -- assets
      -- scss (contains SCSS files, which can be located inside subfolders)
      -- scripts
         -- vendor 
            -- plugins (Also contain some SCSS files from the)
      -- css
      -- also some other folders (no scss or css here though)
   -- dist (distribution folder)
   -- other folders too for html, php etc...

Когда я хочу загрузить скрипт на свой удаленный сервер, я сначала обрабатываю полную структуру папок в public_html в dist.Я делаю это с помощью сценария сборки, build.sh, который вы можете увидеть здесь:

function prepareForBuild(){
    echo "Updating dependencies...";
    bower install

    echo "Preparing 'dist' directory...";
    mkdir -p dist
    rm -rf dist/*
    # for the stackoverflow markup... */
}

function buildApp(){
    cd assets
    echo "Creating temp directory..."
    mkDir -p temp

    ## MERGING TAKES (OR SHOULD) PLACE HERE
    find "/" -name '*.scss' -exec cat {} \; > merge.scss


    cd ../
    pause
    # requirejs optimization
    echo "Optimizing files...";
    node r.js -o build/build.js
}

function cleanup(){
    echo "Cleaning up unnecessary files...";
    cd dist

    rm -f bower.json .gitignore .bowerrc README.md .DS_Store config.rb
    rm -f build.sh build.txt composer.json composer.lock
    rm -rf build dist scss .git .sass-cache .idea
}

function pause(){
   read -p "$*"
}

prepareForBuild
buildApp && cleanup 

echo "Building finished!";

Проблема:

Однако, когда я запускаюСценарий в терминале Git bash прерывается в этой строке:

find "/" -name '*.scss' -exec cat {} \; > merge.scss

Редактировать: «/» или «\», похоже, не влияет на проблему :(
Кроме того, запустите от root (public_html)каталог: test run

, где он возвращается в обычной командной строке «Файл не найден - * .scss» (и выводит пустой файл merge.scss) и просто перестает работать вGit Bash Terminal. Я основал эту строку на этом ответе, но я не могу заставить его работать на меня. Я также попробовал что-то вроде this , но это только возвращает больше ошибок.Что мне здесь не хватает?

РЕДАКТИРОВАТЬ!

Я думал, что оболочка bash просто перестала работать, но кажется, что это не так. Через некоторое время она возвращает это:Git Bash error Что это значит? Справочная папка неверна?

Цель:

As said Я хотел бы рекурсивно сканировать папку активов на наличие .scss файлов и объединить их в один default.scss.

Если это слишком много, попросить другое решение, интегрированное с require.js (или просто с узлом)было бы также возможно, как вы можете видеть в моем сценарии, я уже использую require.js для стандартной оптимизации.

Спасибо за ваше время и терпение!

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Если вы хотите сканировать файлы в каталоге ресурсов, не указывайте корневой каталог в команде find.Пропуск каталогов также может быть хорошей идеей.

find . -name "*.scss" -not -type d -exec cat {} \; > merge.scss

Если вы хотите, чтобы файл merge.scss был создан во вновь созданном каталоге temp, вам нужно сделать его текущим каталогом.,Затем вы можете выполнить сканирование файла из родительского каталога assets.

function buildApp(){
    cd assets
    echo "Creating temp directory..."
    mkDir -p temp

    ## MERGING TAKES (OR SHOULD) PLACE HERE
    cd temp
    find .. -name '*.scss' -not -type d -exec cat {} \; > merge.scss

    cd ../
    pause
    # requirejs optimization
    echo "Optimizing files...";
    node r.js -o build/build.js
}

Кроме того, работает ли команда pause в оболочке bash?Это команда Windows, если у вас нет чего-то еще.

0 голосов
/ 22 октября 2018

Ваш параметр -exec пропускает специальный элемент {} , то есть файл, соответствующий каждой итерации find .Кроме того, вы не можете окончательно использовать «\» в качестве корневого пути, по крайней мере, это будет «/».

Тем не менее, в идеале вы должны использовать определенный подпуть для повышения эффективности и для разрешенийпричины доступа (я полагаю, что ваше использование может не иметь разрешения на доступ ко всем подпутям из корневого пути?).

По крайней мере, вы можете обновить свою инструкцию до:

find '/' -type f -name "*.scss" -exec cat {} \; > merge.scss
...