Bundle with Browserify, transpile and minify with Babel automatically to your NodeJS runtime compatible JavaScript.
This plugin is a child of the great serverless-optimizer-plugin. Kudos!
Requirements:
- Serverless v1.12.x or higher.
- AWS provider and nodejs4.3/6.10/8.10 runtimes
Install via npm in the root of your Serverless service:
npm install serverless-plugin-optimize --save-dev
- Add the plugin to the
plugins
array in your Serverlessserverless.yml
:
plugins:
- serverless-plugin-optimize
- Set your packages to be built individually to have smaller packages:
package:
individually: true
- All done! Optimize will run on SLS
deploy
andinvoke local
commands
Configuration options can be set globally in custom
property and inside each function in optimize
property. Function options overwrite global options.
- debug (default
false
) - When debug is set totrue
it won't removeprefix
folder and will generate debug output at the end of package creation. - enabled (default
true
) - When enabled is set tofalse
it won't optimize code. - exclude (default
['aws-sdk']
) - Array of modules or paths that will be excluded. - extensions (default
['.js', '.json']
) - Array of optional extra extensions modules that will be included. - external Array of modules to be copied into
node_modules
instead of being loaded into browserify bundle. Note that external modules will require that its dependencies are within its directory and this plugin will not do this for you. e.g. you should execute the following: (cd external_modules/some-module && npm i --prod
) - externalPaths Optional object key value pair of external module name and path. If not set, external modules will look for reference path in
node_modules
. - global (default
false
) - When global is set totrue
transforms will run insidenode_modules
. - ignore - Array of modules or paths that won't be transformed with Babelify.
- includePaths - Array of file paths that will be included in the bundle package. Read here how to call these files.
- minify (default
true
) - When minify is set tofalse
Babili preset won't be added. - plugins - Array of Babel plugins.
- prefix (default
_optimize
) - Folder to output bundle. - presets (default
['env']
) - Array of Babel presets.
custom:
optimize:
debug: true
enabled: true
exclude: ['ajv']
extensions: ['.extension']
external: ['sharp']
externalPaths:
sharp: 'external_modules/sharp'
global: true
ignore: ['ajv']
includePaths: ['bin/some-binary-file']
minify: false
prefix: 'dist'
plugins: ['transform-decorators-legacy']
presets: ['es2017']
- optimize (default
true
) - When optimize is set tofalse
the function won't be optimized.
functions:
hello:
optimize: false
- exclude - Array of modules or paths that will be excluded.
- extensions - Array of optional extra extensions modules that will be included.
- external Array of modules to be copied into
node_modules
instead of being loaded into browserify bundle. Note that external modules will require it's dependencies within it's directory. (cd external_modules/some-module && npm i --prod
) - externalPaths Optional object key value pair of external module name and path. If not set, external modules will look for reference path in
node_modules
. - global - When global is set to
true
transforms will run insidenode_modules
. - ignore - Array of modules or paths that won't be transformed with Babelify.
- includePaths - Array of file paths that will be included in the bundle package. Read here how to call these files.
- minify - When minify is set to
false
Babili preset won't be added. - plugins - Array of Babel plugins.
- presets - Array of Babel presets.
functions:
hello:
optimize:
exclude: ['ajv']
extensions: ['.extension']
external: ['sharp']
externalPaths:
sharp: 'external_modules/sharp'
global: false
ignore: ['ajv']
includePaths: ['bin/some-binary-file']
minify: false
plugins: ['transform-decorators-legacy']
presets: ['es2017']
There is a difference you must know between calling files locally and after optimization with includePaths
.
When Optimize packages your functions, it bundles them inside /${prefix}/${functionName}/...
and when your lambda function runs in AWS it will run from root /var/task/${prefix}/${functionName}/...
and your CWD
will be /var/task/
.
Solution in #32 by @hlegendre. path.resolve(process.env.LAMBDA_TASK_ROOT, ${prefix}, process.env.AWS_LAMBDA_FUNCTION_NAME, ${includePathFile})
.
Help us making this plugin better and future proof.
- Clone the code
- Install the dependencies with
npm install
- Create a feature branch
git checkout -b new_feature
- Lint with standard
npm run lint
This software is released under the MIT license. See the license file for more details.