如何使用汇总来捆绑包含es7代码的文件?

时间:2019-08-19 09:28:49

标签: javascript ecmascript-6 babeljs rollupjs ecmascript-7

Chrome当前支持,但是汇总拒绝我的es7代码:

[!] Error: Unexpected token
static/app.js (8:14)
 6:
 7: class App extends Component {
 8:   static name = 'MyES7App';

Error: Unexpected token
    at error (/usr/local/lib/node_modules/rollup/dist/rollup.js:9435:30)
    at Module.error (/usr/local/lib/node_modules/rollup/dist/rollup.js:13407:9)
    at tryParse (/usr/local/lib/node_modules/rollup/dist/rollup.js:13320:16)
    at Module.setSource (/usr/local/lib/node_modules/rollup/dist/rollup.js:13630:33)
    at Promise.resolve.catch.then.then.then (/usr/local/lib/node_modules/rollup/dist/rollup.js:16460:20)

有没有办法使它起作用?我只想将一些文件捆绑/最小化为一个文件,而无需照顾跨浏览器的支持甚至是转译。

1 个答案:

答案 0 :(得分:0)

问题是,为了能够减少源代码,工具应该了解它。缩小源代码(例如“纯文本”)几乎是不可能的,您所能做的就是删除换行符和多余的空格。最小化器正在使用解析器,从源代码生成抽象语法树,然后使用此AST。

Rollup使用Acorn作为JS解析器,并且默认情况下它不支持类成员。即使它们在Chrome中可用,但仍未在EcmaScript标准中,而是proposal on stage 3

因此,您需要使用其他解析器(例如Babel附带的Babylon),或者以某种方式向Acorn教授新的语言功能。

我想最简单的方法是设置Babel并使用rollup-plugin-babel,以支持新的语法和建议。

UPD这与Rollup issue相关,但似乎建议的Acorn解决方案不再起作用...