Как выполнить хук после сборки в файле ember-cli Brocfile.js?

У меня есть проект ember-cli, который создается в каталоге dist/. Я настроил приложение для обработки ресурсов в каталоге dist/ и установил для истории использование хэша вместо pushState. Это позволяет мне символически связать index.html с корнем. Причина в том, что для переноса проекта на gh-pages на GitHub требуется корень index.html, а для Ember-приложений маршрутизация должна быть абсолютной, а не относительной (насколько мне известно). Однако GitHub не будет переходить по символическим ссылкам и потребует копию вывода index.html. Это работает, и теперь у меня есть 2 шага сборки (ember build и cp dist/index.html ./index.html).

Как я могу сказать своему Brocfile.js скопировать полученный файл index.html после того, как он будет построен?

Немного предыстории: я разрабатываю аддон ember-cli. Я размещаю его на GitHub. Мне нужно предоставить демо-сайт. gh-pages — правильное место для размещения демо-сайта. Поэтому я создаю приложение ember-cli в ветке gh-pages. Я не мог установить выходную папку на ./, потому что сборка ember будет rm -rf выходной директорией, уничтожающей исходный код. Так что должно быть dist/. Я не мог использовать <meta http-equiv="Refresh"..., потому что Ember перепутал пути и вылетает при запуске. Таким образом, решение, которое у меня было, состояло в том, чтобы символически связать/скопировать index.html на более высокий уровень и изменить конфигурацию ember, чтобы добавить каталог dist/ к активам и установить маршрутизацию на хэш вместо pushState.

В настоящее время у меня есть скрипт deply.sh, который делает это, но я хотел знать, есть ли способ использовать для этого Broccoli?


person Sukima    schedule 03.03.2015    source источник


Ответы (1)


Мы закончили это в Ghost. Используйте ember-cli, чтобы сгенерировать для себя in-repo-аддон, а затем используйте свою любимую библиотеку для копирования файла (у меня уже была fs-extra, и я использую ее)

Создайте свой аддон с ember g in-repo-addon <addon-name>

in /lib/<addon-name>/index.js:

module.exports = {
    name: '<addon-name>',
    postBuild: function (results) {
        var fs = this.project.require('fs-extra');
        fs.copySync(results.directory + '/index.html', '../server/views/default.hbs');
    }
};

Пример от Ghost

Документы Ember-cli: разработка дополнений и добавления каркаса в репо

person Novaugust    schedule 12.03.2015
comment
Вы размещаете свой аддон в частном репозитории npm или через гутхаб? Или есть способ включить аддон в кодовую базу приложения ember-cli? - person Sukima; 14.03.2015
comment
Посмотрел код по ссылке. Вы включаете его в репозиторий приложения. Я собираюсь отредактировать ответ для других, которым, как и мне, может понадобиться больше объяснений. Спасибо, кстати, я бы никогда не знал, что вы можете писать свои собственные надстройки внутри проекта! Мои коллеги будут аллилуйя с этой новостью. - person Sukima; 14.03.2015
comment
Привет, Сукима, извини за поздний ответ - я не слишком часто бываю на этом сайте ;) Ты прав, что ember generate addon предназначен для создания внешних дополнений; команда для создания надстройки in-reop — ember g in-repo-addon. Так, например, чтобы создать надстройку, я запустил ember g in-repo-addon asset-delivery, а затем отредактировал созданный index.js. Никакой другой работы не требуется. - person Novaugust; 19.03.2015
comment
Ух ты, in-repo-addon, насколько я мог судить, выглядела как недокументированная функция. Он был похоронен глубоко в документах. Здорово знать, что он есть! Спасибо. - person Sukima; 19.03.2015
comment
Я столкнулся с той же проблемой, поэтому написал дополнение для копирования файлов после сборки: npmjs.com/package/ember-cli-post-build-copy - person Tim Overly; 21.01.2016