Будет uglify включать файл дважды, если используется селектор подстановочных знаков.

Учитывая мои настройки уродства ниже; будет ли файл manager.js дважды включен в результирующий файл foo.js? Или uglify достаточно умен, чтобы не включать manager.js дважды?

...
uglify: {  
    options: {  
        compress: true,
    },
    build: {
        files: {
            'dist/foo.js': [
                'js/manager.js',  // Other files depend on this - must be included first
                'js/*.js',  // Does this mean manager.js will be included twice?
            ],
        }
    }
},

Структура папки:

./js/manager.js
./js/bar.js
./js/baz.js

Если uglify захватывает файл дважды, есть ли какие-либо рекомендации, как я могу избежать этого без необходимости вручную добавлять каждый файл javascript?


person sazr    schedule 22.12.2017    source источник
comment
это должно быть дважды, однако я не уверен в этом шаблоне js/!(manager)*.js? в любом случае, вы можете использовать параметр filter   -  person Chay22    schedule 23.12.2017
comment
Зачем усложнять, если можно переместить зависимости (в данном случае *.js) в подпапку.   -  person bigless    schedule 23.12.2017


Ответы (1)


Краткий ответ

Учитывая мои настройки уродства ниже; будет ли файл manager.js дважды включен в результирующий файл foo.js?

Нет, содержимое js/manager.js будет первым в результирующем файле (т. е. dist/foo.js) и НЕ будет включено дважды при использовании текущей конфигурации задачи uglify.

Или uglify достаточно умен, чтобы не включать manager.js дважды?

Да вроде как, однако на самом деле это grunt решает эту проблему перед передачей Array уникальных путей к файлам в uglify.


Длинный ответ

Выдержки из документации grunt для шаблонов гласят:

  1. #P6#
    #P7#
  2. В документации также приведен следующий пример кода:

    // Here, bar.js is first, followed by the remaining files, in alpha order:
    {src: ['foo/bar.js', 'foo/*.js'], dest: ...}
    

Чтобы подтвердить пункты, упомянутые в документации, давайте предположим, что у нас есть следующие пять исходных файлов .js, хранящихся в каталоге js/. Псевдоконтент для каждого файла указан ниже имени файла:

  • manager.js

    console.log('manager.js')
    
  • a.js

    console.log('a.js')
    
  • bar.js

    console.log('bar.js')
    
  • baz.js

    console.log('baz.js')
    
  • quux.js

    console.log('quux.js')
    

Если мы запустим grunt, используя файлы, перечисленные выше, и вашу текущую конфигурацию задачи uglify, результат будет следующим:

foo.js

console.log("manager.js"),console.log("a.js"),console.log("bar.js"),console.log("baz.js"),console.log("quux.js");

Как вы видете:

  1. console.log("manager.js") появляется первым и только один раз (т. е. набор результатов уникален).
  2. Остальные файлы (т. е. найденные с помощью шаблона 'js/*.js') были добавлены в альфа-порядке.
person RobC    schedule 23.12.2017