3

我正在使用烧瓶资产,并且没有可用的过滤器(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'
)
4

1 回答 1

3

您将需要将 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-preset-env通过指定绝对或相对路径来告诉 babel 你的安装位置:

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 似乎没有必要,因为它们落后于前端世界中最新最好的文档和软件包版本。

于 2019-04-17T13:53:42.297 回答