From cf4fee44d823e140337b149943d0804d0010373f Mon Sep 17 00:00:00 2001 From: Tony Yuen Date: Fri, 26 Aug 2016 17:59:25 +0800 Subject: [PATCH] added examples and readme for packing external packages feature --- README.md | 24 +++++++++++++++++++ .../include-external-npm-packages/event.json | 5 ++++ .../include-external-npm-packages/handler.js | 8 +++++++ .../package.json | 19 +++++++++++++++ .../serverless.env.yml | 15 ++++++++++++ .../serverless.yml | 21 ++++++++++++++++ .../webpack.config.js | 7 ++++++ 7 files changed, 99 insertions(+) create mode 100644 examples/include-external-npm-packages/event.json create mode 100644 examples/include-external-npm-packages/handler.js create mode 100644 examples/include-external-npm-packages/package.json create mode 100644 examples/include-external-npm-packages/serverless.env.yml create mode 100644 examples/include-external-npm-packages/serverless.yml create mode 100644 examples/include-external-npm-packages/webpack.config.js diff --git a/README.md b/README.md index f8a0cdc..5b3c778 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,30 @@ custom: Note that, if the `output` configuration is not set, it will automatically be generated to write bundles in the `.webpack` directory. + +By default, the plugin will try to bundle all dependencies. However, you don't +want to include all packages in some cases such as selectively import, excluding +builtin package (aws-sdk) and handling webpack-incompatible packages. In this case, +you add all the packages, you want to exclude from bundled files, into `externals` field +of your `webpack.config.json` and add those, you want to include in final distribution, +into `serverless.yml`: + +```json +// webpack.config.json +{ + externals: ["package1", "package2"] // packages to be excluded from bundled file +} +``` + +```yaml +# serverless.yml +custom: + includePackages: + - package1 # packages to be included in distribution +``` + +You can find an example setup in the [`examples`](./examples) folder. + ## Usage ### Automatic bundling diff --git a/examples/include-external-npm-packages/event.json b/examples/include-external-npm-packages/event.json new file mode 100644 index 0000000..2ac50a4 --- /dev/null +++ b/examples/include-external-npm-packages/event.json @@ -0,0 +1,5 @@ +{ + "key3": "value3", + "key2": "value2", + "key1": "value1" +} diff --git a/examples/include-external-npm-packages/handler.js b/examples/include-external-npm-packages/handler.js new file mode 100644 index 0000000..5048e52 --- /dev/null +++ b/examples/include-external-npm-packages/handler.js @@ -0,0 +1,8 @@ +'use strict'; + +var AWS = require('aws-sdk'); +var fbgraph = require('fbgraph'); + +module.exports.hello = function (event, context, cb) { + cb(null, { message: 'hello fb & aws', event }); +} diff --git a/examples/include-external-npm-packages/package.json b/examples/include-external-npm-packages/package.json new file mode 100644 index 0000000..b13ee30 --- /dev/null +++ b/examples/include-external-npm-packages/package.json @@ -0,0 +1,19 @@ +{ + "name": "serverless-include-external-npm-package", + "version": "1.0.0", + "description": "Serverless webpack example", + "main": "handler.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Tony Yuen ", + "license": "MIT", + "devDependencies": { + "serverless-webpack": "^1.0.0-beta.2", + "webpack": "^1.13.1" + }, + "dependencies": { + "aws-sdk": "^2.5.3", + "fbgraph": "^1.3.0" + } +} diff --git a/examples/include-external-npm-packages/serverless.env.yml b/examples/include-external-npm-packages/serverless.env.yml new file mode 100644 index 0000000..38baba6 --- /dev/null +++ b/examples/include-external-npm-packages/serverless.env.yml @@ -0,0 +1,15 @@ +# This is the Serverless Environment File +# +# It contains listing of your stages and their regions +# It also manages serverless variables at 3 levels: +# - common variables: variables that apply to all stages/regions +# - stage variables: variables that apply to a specific stage +# - region variables: variables that apply to a specific region + +vars: +stages: + dev: + vars: + regions: + us-east-1: + vars: diff --git a/examples/include-external-npm-packages/serverless.yml b/examples/include-external-npm-packages/serverless.yml new file mode 100644 index 0000000..f42ca38 --- /dev/null +++ b/examples/include-external-npm-packages/serverless.yml @@ -0,0 +1,21 @@ +service: serverless-webpack-multiple-entries-example + +# Add the serverless-webpack plugin +plugins: + - serverless-webpack + +provider: + name: aws + runtime: nodejs4.3 + +custom: + includePackages: # packages to be included in distribution + - fbgraph + +functions: + first: + handler: handler.hello + events: + - http: + method: GET + path: first diff --git a/examples/include-external-npm-packages/webpack.config.js b/examples/include-external-npm-packages/webpack.config.js new file mode 100644 index 0000000..3eeb2ac --- /dev/null +++ b/examples/include-external-npm-packages/webpack.config.js @@ -0,0 +1,7 @@ +var path = require('path'); + +module.exports = { + entry: './handler.js', + target: 'node', + externals: ["fbgraph", "aws-sdk"] // packages to be excluded from bundled file +};