Support `serverless run`
kbrandwijk opened this issue · 9 comments
This is a Feature Proposal
Description
For feature proposals:
-
What is the use case that should be solved. The more detail you describe this in the easier it is to understand for us.
Add support forserverless run
by listening to thebefore:run:run
hook. -
If there is additional config how would it look
Something similar to this:
https://github.com/serverless-heaven/serverless-webpack/blob/master/index.js#L130-L132
I recently added the same feature to serverless-plugin-typescript (for reference):
https://github.com/graphcool/serverless-plugin-typescript/blob/master/src/index.ts#L31-L37
Hi @kbrandwijk . Great idea 🙌
This would indeed be a great addition. Having the hook implemented would be quite easy. What I'm thinking about is, if a watch option (like the one for sls-offline or sls invoke local) would be possible in the run scenario. I will dig into this a bit - as Docker support was added too recently by the possibility to enable watch polling instead of filesystem events with a switch, that might be possible.
I haven't got the watching part working with serverless-plugin-typescript
in combination with serverless run
, so any ideas we can share would benefit both plugins.
@kbrandwijk Could you check if my PR works as expected? On my Windows system I get up to where the functions are loaded into the emulator, but after that it breaks (Ubuntu shell).
There is a known issue/bug that the event gateway does not work in Windows. I have to check it on my native Ubuntu.
I think I can get the watch mode running - in a similar way as the local invoke does, but just with respawning the run command on a source change. But I have to add and check that on my Ubuntu.
I'm also on Windows. I have that same issue. I just start sle
manually, then run sls run
in a different console and it picks up the already running emulator. I'll check the PR version tomorrow.
I checked the contents of the emulator storage and they contain the compiled sources which looks ok so far. Starting sle
separately did the trick, thanks.
However, the node modules are not copied -> because I did not invoke the packaging. As the event gateway is completely "external" for the sources, I have to add that to the PR.
Added it - now the needed node modules are correctly copied to the emulator.
The command seems to work for me now.
I played a bit with getting watch working. I managed to let webpack watch the directory, and it got triggered correctly, but it seems that the run command locks the directory. I have to check if I somehow can get arount the deletion of the service directory for the run command. Then it should work.... stand by, I'm working on it.
Serverless: Sources changed.
Error --------------------------------------------------
EBUSY: resource busy or locked, rmdir 'C:\Projects\serverless\test\babel-dynam
ically-entries\.webpack\service'
I solved that problem now and the recompile is suceesfully triggered, but as soon as it tries to register the functions again, SLS fails with:
Serverless Functions loading...
Serverless Functions loaded successfully in your current "serverless run" s
ession.
Error --------------------------------------------------
Failed to configure the Event Gateway. Failed to register the function babel-d
ynamically-entries-example-first due the error: Function "babel-dynamically-entr
ies-example-first" already registered.
I have to find out, how to unregister functions from the gateway or just deploy them again.
I got the watch option working correctly now and will update the PR after some cleanup!
Then you can use serverless run
and serverless run --watch
PR has been updated. Could you please try with both variants?
Released with 4.1.0