2015-08-04 3 views
2

Есть ли способ в uglify (или другом пакете узлов, если необходимо) объединить все мои IIFE в единый IIFE? В моем проекте мы записываем каждый файл внутри IIFE и передаем один глобальный в IIFE в качестве параметра.Комбинируйте IIFEs в grunt/uglify

Используя самые сокращенные JS, IIFE с «использовать строгий» директивы 31 bytes (a наша единая глобальная.)

(function(a){"use strict";/* code here */}()); 

Это означает, что если у нас есть 20 исходных файлов, мы в конечном итоге с 600 байтов впустую. Если у нас есть 100 исходных файлов, это впустую 3100 байт ... и т.д.

ответ

0

Есть ли способ в уродовать (или другой пакет узла, если это необходимо), чтобы объединить все мой IIFE в один IIFE?

Да, но с ограничениями. Вы можете использовать grunt-contrib-uglify, который поставляется с двумя possibilites:

  • Использование wrap
  • Использование banner и footer(дает вам немного больше контроля на выходе)

конфигурации в Gruntfile.js будет:

wrap

uglify: { 
    options: { 
     wrap: 'foo', 
    }, 
    files: { 
     'path/to/output.min.js': ['path/to/input/*.js'] 
    } 
} 

Значение wrap будет ваш export или global переменной вы хотите передать. Это должно работать с несколькими IFEE, поскольку ваша глобальная переменная будет просто передана другим IFEE.

banner и footer

uglify: { 
    options: { 
     banner: '(function (a) {', 
     footer: '})(foo);' 
    }, 
    files: { 
     'path/to/output.min.js': ['path/to/input/*.js'] 
    } 
} 

Ваш выход будет обернут в (function (a) { /* your other scripts */ })(foo);. Недостаток, по крайней мере, для моего понимания, что вы не можете написать свой код в IIFE, поскольку IIFE будет сгенерирован в вашем выпуске.


Подробнее об официальном documentation.

Смежные вопросы