4

我正在搜索一个Flask-Assets过滤器,它允许我丑化 javascript 并支持 ES6 语法。我尝试使用uglifyjs-es二进制而不是,uglifyjs但我不知道如何配置我的过滤器以使用uglifyjs-es二进制。

我有这个:

my_app_js = Bundle(
    'js/MyApp.js',
    filters='uglifyjs',
    output='my_app_js.js'
)

Webassets 文档

UglifyJS 是为 NodeJS 编写的外部工具;此过滤器假定 uglifyjs 可执行文件在路径中。否则,您可以定义UGLIFYJS_BIN设置

也许解决方案就在那里,但我不知道在哪里以及如何更改该UGLIFYJS_BIN设置,知道吗?

另外,我在这里读到该uglifyjs-es项目不再维护。terser 似乎是另一种选择,但它也可以用作过滤器吗?

编辑

如果您知道uglifyjs-es代码示例的一个很好的替代方案,您将赢得赏金;)

4

3 回答 3

2

如果你使用 npm 安装了 uglifyjs,它应该node_modules在你项目的文件夹中。

您可以按如下方式配置烧瓶:

app = Flask(__name__)
app.config['UGLIFYJS_BIN'] = 'path/to/node_modules/uglify-js/bin/uglifyjs'

关于 uglifyjs-es,你知道它是无人维护的。但是,如果您的代码使用它被缩小,它仍然是一个不错的选择。

如此处所述:

  • uglify-js 只支持 ES5 代码作为输入。
  • uglify-es 也支持 ES6,但有缺陷,已被废弃。
于 2020-01-06T19:33:37.180 回答
1

Terser 的命令行几乎和ls. 我发现对我来说最简单的方法是使用带有 Terser 插件的 Rollup,并且有现成的Rollup filter for webassets。这样,所有 Terser 配置都在您在过滤器额外参数中指定的 Rollup 配置中完成。ES6 模块的最小 Terser 配置:

{
  compress: {ecma: 2015, module: true},
  mangle: {module: true},
  output: {ecma: 2015},
  parse: {ecma: 2015},
  rename: {},
}

使用已配置的 Terser 插件,您现在可以像应用了捆绑和缩小过滤器一样使用它:

from flask_assets import Bundle
from webassets.filter import register_filter
from webassets_rollup import Rollup

register_filter(Rollup)

all_css = Bundle(
    'css/app.scss', filters='node-scss,cleancss', output='dist/all.%(version)s.min.css',
)

all_js = Bundle(
    'js/main.js', filters='rollup', output='dist/all.%(version)s.min.js',
)
于 2020-07-29T22:28:41.037 回答
0

看起来您需要设置一个名为UGLIFYJS_BIN. 有关Linux 说明,请参见此处,或有关 Windows 说明,请参见此处

于 2020-01-06T19:22:28.813 回答