如何在烧瓶中缩小ES2016或转换为ES2015?

时间:2019-04-16 16:17:42

标签: flask babeljs flask-assets webassets

我正在使用flask-assets,并且所有可用的过滤器(rjsmin,jsmin,closure_js,uglifyjs等)都无法缩小ES2016 JavaScript文件。缩小的文件会在浏览器控制台上产生错误(由于转换错误),甚至会在执行服务之前崩溃,然后再提供资源。 另外,我尝试了webassets的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 个答案:

答案 0 :(得分:1)

您需要将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似乎是不必要的,因为它们落后于前端世界中最新和最出色的文档和软件包版本。