Подпапки Yeoman/Grunt usemin

У меня ужасное время, когда я использую yeoman/grunt и usemin, пытаясь заставить выходные файлы работать одновременно с записью правильного пути внутри html, когда у меня есть подпапки.

Моя базовая установка заключается в том, что есть страницы верхнего уровня (например, index.html), а также страницы для конкретных языков в подпапках (en, de, fr и т. д.) - каждая из них будет иметь общие файлы js (например, jquery), но также js-файлы для конкретного языка (то же самое для css, но все просто...)

– Gruntfile.js
– app
    |– index.html
    |– js
        jquery.js
            |– en
                english.js
            |– de
                german.js
    |– css
    |– en
        |– index.html
    |– de
        |– index.html
– dist

Итак, в основном - есть index.html верхнего уровня, в котором есть jquery и т. Д. - Таким образом, тег script там может выглядеть так:

<script src="js/jquery.js"></script>

или с обр.

<script src="js/123.jquery.js"></script>

Но в en/index.html тег script должен выглядеть так (для общего - как jquery)

<script src="../js/jquery.js"></script>

или с обр.

<script src="../js/123.jquery.js"></script>

Проблема в ../.

Я могу получить файл js, созданный, но не измененный, или измененный, но пустой, или созданный и измененный, но в неправильном месте (чаще всего вне/над папками app и dist!)

В en/index.html - я просто не могу понять, как должна выглядеть сборка: js, например.

<!-- build:js js/jquery.js -->
<script src="../js/jquery.js"></script>
<!-- endbuild -->

<!-- build:js js/en/english/jquery.js -->
<script src="../js/en/english.js"></script>
<!-- endbuild -->

Я пробовал каждую комбинацию, о которой только мог подумать, - кажется, что если я пишу ../ в пути сборки: js, то фактический файл помещается на 1 уровень выше папки приложения, но записывает путь в html правильно. Если я оставлю ../ out, он поместит файл в нужное место, но в html тоже нет ../ (что ему явно нужно) - так как я могу сказать, что я хочу, чтобы выходной файл ссылка на один уровень выше (вне en/ папки), но ворчание не поместило его на один уровень выше (вне папки dist!)

Спасибо!


person Calv J    schedule 20.08.2013    source источник


Ответы (1)


Я столкнулся с очень похожей проблемой. Я размещал свой сгенерированный ворчанием сайт на S3, используя их статический вариант веб-сайта. Локально контент, сгенерированный usemin, работал отлично (с абсолютными путями), но, поскольку у меня был сайт в корзине на S3, для фактической работы ему требовался полный абсолютный путь (с доменом) к файлам ресурсов.

Введите grunt-replace. Использование шаблона поиска/замены было единственным способом, который я нашел для достижения этой цели. Мне просто нужно было заменить «/assets/» на «http://s3domain.com/bucket/site-name/assets/". Вот мое определение задачи ворчания:

replace: {
  dist: {
    options: {
      patterns: [
        {
          match: /\/assets\//,
          replacement: 'http://s3domain.com/bucket/site-name/assets/'
        }
      ]
    },
    files: [
      {
        expand: true,
        src: ['dist/**/*.html']
      }
    ]
  }
}

Я добавил это в свою задачу deploy, чтобы она выполнялась только перед тем, как я собираюсь отправить ее на S3.

В ваших случаях вы, вероятно, могли бы позволить usemin делать свое дело, а затем только заменить файлы в подкаталогах (например, en или es) и изменить пути ресурсов, чтобы перед ними стоял ../.

person deadwards    schedule 03.11.2013
comment
Спасибо за ответ, это действительно помогло мне обойти аналогичную проблему, которая у меня была, см. вопрос stackoverflow.com/questions/20290757/ - person Ain Tohvri; 29.11.2013