@shiftlab/serverless-plugin-typescript v0.1.0
Warning! This is a patched version of the original package. Use at own risk!!
This package differs from the original in the following ways...
1. This will avoid compiling any functions that are not marked with the node runtime.
1. Package now copies over a python_code directory to the updated staging area. This ensures that any functions in that directory will
be packaged correctly during the serverless package artifact step.
This package is for a very specific use case. If it does not serve your purpose please use the original
serverless-plugin-typescript
Serverless plugin for zero-config Typescript support
Features
- Zero-config: Works out of the box without the need to install any other compiler or plugins
- Supports ES2015 syntax + features (
export,import,async,await,Promise, ...) - Supports
sls package,sls deployandsls deploy function - Supports
sls invoke local+--watchmode - Integrates nicely with
serverless-offline
Install
yarn add --dev serverless-plugin-typescript typescript
# or
npm install -D serverless-plugin-typescript typescriptAdd the following plugin to your serverless.yml:
plugins:
- serverless-plugin-typescriptConfigure
See example folder for a minimal example.
tsconfig.json
The default tsconfig.json file used by the plugin looks like this:
{
"compilerOptions": {
"preserveConstEnums": true,
"strictNullChecks": true,
"sourceMap": true,
"allowJs": true,
"target": "es5",
"outDir": ".build",
"moduleResolution": "node",
"lib": ["es2015"],
"rootDir": "./"
}
}Note 1: The
outDirandrootDiroptions cannot be overwritten.Note 2: Don't confuse the
tsconfig.jsonin this repository with the one mentioned above.
Including extra files
All files from package/include will be included in the final build file. See Exclude/Include
Usage
Google Cloud Functions
When using with Google Cloud Functions via the serverless-google-cloudfunctions
plugin, you simply have to provide a main field in your package.json:
{
// ...
"main": "handler.js",
// ..
}And this plugin will automatically compile your typescript correctly. Note
that the field must refer to the compiled file name, namely, ending with a .js
extension.
If a main field was not found, then this plugin will use index.js. Before
compilation begins, it will check to see that the file indicated exists with a
.ts extension before actually trying to compile it.
Automatic compilation
The normal Serverless deploy procedure will automatically compile with Typescript:
- Create the Serverless project with
serverless create -t aws-nodejs - Install Serverless Typescript as above
- Deploy with
serverless deploy
Usage with serverless-offline
The plugin integrates very well with serverless-offline to simulate AWS Lambda and AWS API Gateway locally.
Add the plugins to your serverless.yml file and make sure that serverless-plugin-typescript
precedes serverless-offline as the order is important:
plugins:
...
- serverless-plugin-typescript
...
- serverless-offline
...Run serverless offline or serverless offline start to start the Lambda/API simulation.
In comparison to serverless offline, the start command will fire an init and a end lifecycle hook which is needed for serverless-offline and e.g. serverless-dynamodb-local to switch off resources (see below)
serverless-dynamodb-local
Configure your service the same as mentioned above, but additionally add the serverless-dynamodb-local
plugin as follows:
plugins:
- serverless-plugin-typescript
- serverless-dynamodb-local
- serverless-offlineRun serverless offline start.
Other useful options
You can reduce the clutter generated by serverless-offline with --dontPrintOutput and
disable timeouts with --noTimeout.
Run a function locally
To run your compiled functions locally you can:
$ serverless invoke local --function <function-name>Options are:
--functionor-f(required) is the name of the function to run--watch- recompile and run a function locally on source changes--pathor-p(optional) path to JSON or YAML file holding input data--dataor-d(optional) input data
Enabling source-maps
You can easily enable support for source-maps (making stacktraces easier to read) by installing and using the following plugin:
yarn add --dev source-map-support// inside of your function
import 'source-map-support/register'If you are using webpack (most likely). Add devtool: 'source-map' to webpack.config.js:
module.exports = {
.... snip ....
devtool: 'source-map',
.... snip ....
}Help & Community
Join our Spectrum community if you run into issues or have questions. We love talking to you!
6 years ago