错误:uglify在编译时引发了异常:

时间:2019-04-27 01:28:13

标签: apostrophe-cms

我无法使用撇号资产缩小ES6文件。尝试缩小APOS_MINIFY=1 node app apostrophe:generation --create-bundle=prod-bundle

时出现以下错误
Error: uglify threw an exception while compiling:

/home/felix/github/fullpage-cms/lib/modules/materialize/public/js/vendor/cash.js

most likely there is invalid javascript in that file:

Unexpected token: name (evt)
Line 595 col 12


    at self.minifyScript (/home/felix/github/fullpage-cms/node_modules/apostrophe/lib/modules/apostrophe-assets/index.js:1099:17)
    at /home/felix/github/fullpage-cms/node_modules/async/lib/async.js:356:13
    at Immediate.iterate [as _onImmediate] (/home/felix/github/fullpage-cms/node_modules/async/lib/async.js:262:13)
    at runCallback (timers.js:810:20)
    at tryOnImmediate (timers.js:768:5)
    at processImmediate [as _immediateCallback] (timers.js:745:5)

当我整体添加实体化的缩小文件时,我没有任何问题。但是整个编译的materialize.min文件非常巨大。因此,我尝试仅导入此处讨论的特定组件:Use Materialize as modular components。该解决方案正是我想要的并且可以正常工作,但是我无法生成生产捆绑包。如何实现对单引号最小化的ES6支持?

1 个答案:

答案 0 :(得分:1)

Apostrophe 2.x中使用的Uglify版本不一定支持ES6语法,但是某些受支持的浏览器(主要是IE11)也不支持,因此无论如何您都需要转换为ES5。

在我们自己的项目中,我们使用Webpack构建一个site.js文件,然后以常规方式将其作为资产推送到Apostrophe。 Bapack包含在Webpack配置中,以确保输出与IE11及更高版本兼容,这对于Uglify也足够。

我们在该Webpack配置中不使用任何特殊技巧,这是用于将ES6 +编译为ES5的典型配置。重要的是将输出文件配置为作为Apostrophe的资产推送的路径。然后,您可以期望在开发和生产中具有相同的行为,即使用和不使用Uglify缩小功能。

(Apostrophe 2.x模块附带的前端代码是以ES5开头的,因此不需要这种处理。Apostrophe3.x将是100%ES2015,并引入了Webpack管道,尽管我们赢得了不会强迫开发人员完全将管道用于他们的项目特定代码-每个人都会不可避免地想要一些自定义Webpack设置,因此将输出文件推送到Apostrophe的技术将继续很普遍。)