Async/await in plugin: works in dev instance, not in docker instance


#1

I get this error when installing a plugin in a docker instance:

Compressing: plugin-third-party-ea46d31326df4fb4ed1d79ef5ecad5179b0512d15492b09e348b67b027cced32.js
uglifyjs '/var/www/discourse/public/assets/_plugin-third-party-ea46d31326df4fb4ed1d79ef5ecad5179b0512d15492b09e348b67b027cced32.js' -p relative -c -m -o '/var/www/discourse/public/assets/plugin-third-party-ea46d31326df4fb4ed1d79ef5ecad5179b0512d15492b09e348b67b027cced32.js' --source-map-root '/assets' --source-map '/var/www/discourse/public/assets/plugin-third-party-ea46d31326df4fb4ed1d79ef5ecad5179b0512d15492b09e348b67b027cced32.js.map' --source-map-url '/assets/plugin-third-party-ea46d31326df4fb4ed1d79ef5ecad5179b0512d15492b09e348b67b027cced32.js.map'
Parse error at _plugin-third-party-ea46d31326df4fb4ed1d79ef5ecad5179b0512d15492b09e348b67b027cced32.js:637,7
	async function onEvent(container, event) {
	      ^
SyntaxError: Unexpected token: keyword (function)
    at JS_Parse_Error.get (eval at <anonymous> (/usr/lib/node_modules/uglify-js/tools/node.js:27:1), <anonymous>:86:23)
    at /usr/lib/node_modules/uglify-js/bin/uglifyjs:384:40
    at time_it (/usr/lib/node_modules/uglify-js/bin/uglifyjs:620:15)
    at /usr/lib/node_modules/uglify-js/bin/uglifyjs:345:9
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)

Removing async/await fixes the issue. It looks like some es6 code is sent to uglifyjs before conversion to es5.

The error doesn’t always occur. A few days ago, I retried installing several times and it finally succeeded. But now I’m stuck again.


(Rafael dos Santos Silva) #2

Did you name your plugin file name.js.es6 ?


#3

Nope, none of my plugin files are named name.js.es6.


(cpradio) #4

Hence the problem, you need to name them with that extension.


#5

My plugin has just installed correctly, at the 3rd attempt.


(cpradio) #6

If you want it to compile properly, make sure they have a .js.es6 extension, then it will work everytime.


(Sam Saffron) #7

I am not even sure if we enabled async await in babel @eviltrout ? I certainly have never used it in the Discourse code base.


#8

@Falco, if your question was about the extension of my files, then yes, I’m using .js.es6 everywhere.


(Robin Ward) #9

We are not transpiling that. It probably works in the browser if you’re using an evergreen one, but we don’t support it yet.

We could benefit from it, I just haven’t had the time to enable it, make sure the perf is good, and start converting code.


#10

Any news on this? Having it would be great.


(Sam Saffron) #11

We did start using this in tests, have not decided on our strategy yet for using it in production or not.