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})