Как минимизировать ES2016 или конвертировать в ES2015 в колбе? - PullRequest
1 голос
/ 16 апреля 2019

Я использую flask-assets , и ни один из доступных фильтров (rjsmin, jsmin, closure_js, uglifyjs и т. Д.) Не способен минимизировать файл JavaScript ES2016.Сокращенные файлы приводят к ошибкам в консоли браузера (из-за неправильных преобразований) или даже к сбоям при выполнении перед обслуживанием ресурсов.Кроме того, я пробовал фильтр Babel из веб-наборов , и я не вносил никаких изменений в файлы, они просто обслуживаются без изменений.

Мне также не удается применитьзакрытие или babel extra_args для настройки их работы.

Любой совет или рекомендация?

Пример кода:

from flask_assets import Bundle
page_js = Bundle(
    'js/code_with_es2016.js',
    filters='rjsmin',
    output='public/js/code.min.js'
)

1 Ответ

1 голос
/ 17 апреля 2019

Вам нужно будет использовать фильтр babel с babel-presets-env.Документация по webassets немного отстает от последних разработок, что неудивительно, если учесть, насколько быстро все движется в мире javascript.

Итак, сначала вам нужно установить babel-cli глобально:

npm install -g babel-cli

Теперь вам нужно будет установить babel-preset-env локально, поэтому в каталоге вашего проекта выполните:

npm install --save babel-preset-env

Наконец, вот как настроить ваш пакет с помощью flask-assets:

from flask_assets import Bundle, Environment
from webassets.filter import get_filter

assets = Environment()
assets.init_app(app)
babel = get_filter('babel', presets='babel-preset-env')
assets.register('js_all', Bundle(
    'js/code_with_es2016.js',
    output='public/js/code.min.js',
    filters=[babel, 'rjsmin']
))

Вы также можете указать Babel, где установлен ваш babel-preset-env, указав абсолютный или относительный путь к нему:

preset_location = './path/to/node_modules/babel-preset-env'
babel = get_filter('babel', presets=preset_location)
assets.register('js_all', Bundle(
    'js/code_with_es2016.js',
    output='public/js/code.min.js',
    filters=[babel, 'rjsmin']
))

И последнее, и это только (как) мое мнение, яочень рекомендую перейти на процесс сборки на основе javascript / node для ваших ресурсов внешнего интерфейса (вы уже используете babel!).В зависимости от того, что вы разрабатываете, gulp или webpack могут быть хорошими кандидатами для использования в вашей сборке интерфейса.Flask-assets / webassets кажутся просто ненужными, потому что они отстают в своих документах и ​​пакетных версиях от того, что является самым последним и лучшим в мире внешнего интерфейса.

...