Grunt lodash template не отображает и не возвращает массив, не может определить правильный синтаксис

Цель: Ниже приведена основная задача. Это работа, объединять и запутывать файлы, передаваемые через массив строк. Заказ важен, и заказ уже установлен. Типичная и очень простая настройка.

Проблема: Массив, в правильном порядке, полон относительных URL-адресов, которые должны начинаться со строки "app /". app.bummer_js Вы увидите ниже в первом примере, это массив с префиксом вручную, чтобы доказать, что задача работает и шаблоны lodash работают как положено. Следующие примеры должны проиллюстрировать, что любое выражение внутри шаблона не возвращает должным образом ожидаемый массив.

# assume the following arrays are available from another file
app =
  js: [
    'path/to/file/lib/dependency.js'
    'path/to/file/app.js'
  ]
  bummer_js: [
    'app/path/to/file/lib/dependency.js'
    'app/path/to/file/app.js'
  ]

module.exports =
  prod:
    options:
      banner:"<%= banner %>"
    files:
      # straight array reference in template, **manually** prefixed with 'app/' base dir in the app config, 
      # src order maintained, works great except there's a manual process to it.
      "<%= dirs.build %>/js/app.js":"<%= app.bummer_js %>"

      # simply mapping the array fails in grunt, not a recognized pattern or not written because src files were empty.
      # when console logged, the array appears correct and in proper src order
      "<%= dirs.build %>/js/app.js":"<%= _.map(app.js,(file)=>`app/${file}`) %>"

      # none of these syntax styles below work either
      # remove '=' to have it evaluated by lodash
      "<%= dirs.build %>/js/app.js":"<% _.map(app.js,(file)=>`app/${file}`) %>"
      "<%= dirs.build %>/js/app.js":"<%= app.js.map((file)=>`app/${file}`) %>"

      # wrapping template in brackets turns the contents into an array, but src order is lost (i believe this is from going from an object to an array)
      "<%= dirs.build %>/js/app.js":"{<%= _.map(app.js,(file)=>`app/${file}`) %>}"

Очень важно, чтобы src-порядок поддерживался для конкатенационной части Uglify. И после сотен попыток написания правильного синтаксиса lodash, я не могу найти, как написать шаблон для возврата сопоставленного массива, как мне нужно. Единственный способ выполнить задачу - это когда выражение обернуто в {}, предоставляя мне бесполезную связку.

tldr; Каков правильный синтаксис lodash для отображения массива, чтобы распознанный шаблон возвращался в систему Node/Grunt. Все, что мне нужно, это массив файлов с префиксом строки! Это так просто в теории, и я не могу понять это.

1 ответ

prod.files шаблоны Возможно, ваш скрипт, который использовал шаблон, не имеет доступа к переменной app.

скомпилировать шаблон

  # straight array reference in template, **manually** prefixed with 'app/' base dir in the app config, 
  # src order maintained, works great except there's a manual process to it.
  "<%= dirs.build %>/js/app.js":_.template("<%= app.bummer_js %>")({app: app})

  # simply mapping the array fails in grunt, not a recognized pattern or not written because src files were empty.
  # when console logged, the array appears correct and in proper src order
  "<%= dirs.build %>/js/app.js":_.template("<%= _.map(app.js,(file)=>`app/${file}`) %>")({app: app})

  # none of these syntax styles below work either
  # remove '=' to have it evaluated by lodash
  "<%= dirs.build %>/js/app.js":_.template("<% _.map(app.js,(file)=>`app/${file}`) %>")({app: app})
  "<%= dirs.build %>/js/app.js":_.template("<%= app.js.map((file)=>`app/${file}`) %>")({app: app})

  # wrapping template in brackets turns the contents into an array, but src order is lost (i believe this is from going from an object to an array)
  "<%= dirs.build %>/js/app.js":_.template("{<%= _.map(app.js,(file)=>`app/${file}`) %>}")({app: app})

приложение для экспорта

module.exports =
  app: app,
  prod:
    options: ...

В этом случае вы должны добавить вручную app к вашему сценарию, когда вы компилируете шаблон, например

tmpls = require('your/module')
_.template(tmpls.prod.files['<%= dirs.build %>/js/app.js'])({app: tmpls.app})
Другие вопросы по тегам