npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@dotdev/serverless-bundle

v1.2.2

Published

DotDev specific fork of the serverless-webpack package.

Downloads

7

Readme

serverless-bundle Build Status npm

An extension of the serverless-webpack plugin. This plugin bundles your Node.js Lambda functions with sensible defaults so you don't have to maintain your own Webpack configs.

  • Linting via ESLint
  • Caching for faster builds
  • Use ES6 import/export
  • Supports transpiling unit tests with babel-jest
  • Source map support for proper error messages

And all this works without having to install Webpack, Babel, ESLint, etc. or manage any of their configs. Simply add serverless-bundle to your app and you are done!

-    "eslint"
-    "webpack"
-    "@babel/core"
-    "babel-eslint"
-    "babel-loader"
-    "eslint-loader"
-    "@babel/runtime"
-    "@babel/preset-env"
-    "serverless-webpack"
-    "source-map-support"
-    "webpack-node-externals"
-    "eslint-config-strongloop"
-    "@babel/plugin-transform-runtime"
-    "babel-plugin-source-map-support"

+    "serverless-bundle"

You can read more about this over on Serverless Stack.


Getting Started

Install the serverless-bundle plugin using:

$ npm install --save-dev serverless-bundle

Then add it to your serverless.yml.

plugins:
  - serverless-bundle

To run your tests using the same Babel config used in the plugin add the following to your package.json:

"scripts": {
  "test": "serverless-bundle test"
}

Usage

Once installed and added to your serverless.yml, serverless-bundle will automatically package your functions using Webpack when you run the various serverless commands.

Options

You can configure the following through your serverless.yml.

custom:
  bundle:
    sourcemaps: true          # Enable source maps
    caching: true             # Enable Webpack caching
    stats: false              # Don't print out any Webpack output
    linting: true             # Enable linting as a part of the build process
    forceInclude:             # Optional list of NPM packages that need to be included
      - mysql                   # Only necessary if packages are included dynamically
    ignorePackages:           # Ignore building any of the following packages
      - hiredis                 # For ex, hiredis needs to be ignored if using redis
    copyFiles:                # Copy any additional files to the generated package
      - from: 'public/*'        # Where the files are currently
        to: './'                # Where in the package should they go
    packager: npm             # Specify a packager, 'npm' or 'yarn'. Defaults to 'npm'.
    packagerOptions:          # Run a custom script in the package process
      scripts:                  # https://github.com/serverless-heaven/serverless-webpack#custom-scripts
        - echo hello > test

Advanced Options

  • ESLint

    This plugin uses eslint-config-strongloop. You can override this by placing your own .eslintrc.json with the rules you'd like to use. If you'd like to ignore specific files, you can use a .eslintignore file.

  • Customizing Babel and Webpack configs

    This plugin does not support customizing the Babel and Webpack configs, since serverless-webpack does a pretty good job with that. However, if you think the default config is missing some key features, feel free to open an issue about it.

  • Packager scripts

    The packagerOptions.scripts option allows serverless-webpack to run a custom script in the packaging process. This is useful for installing any platform specific binaries. See below for the sharp package.

  • Usage with WebStorm

    Here is some info on how to get this plugin to support running tests in WebStorm — https://github.com/AnomalyInnovations/serverless-bundle/issues/5#issuecomment-582237396

  • Alternative Jest Result Processor

    For CI services (like Atlassian Bamboo CI) that do not work with Jest test results, start by installing jest-mocha-reporter.

    To set the testResultsProcessor option, add "testResultsProcessor": "jest-mocha-reporter" to the Jest section in your package.json. You should see the default command line output when running npm run test, but you should also get a test-report.json.

    To test the reporters option, add "reporters": ["jest-mocha-reporter"] instead. This should result in the same file as above but without the command line output.

Package Specific Config

The packages below need some additional config to make them work.

Knex.js

The knex.js module is automatically excluded from the bundle since it's not compatible with Webpack. However, you need to force include the specific database provider package since these are dynamically included. Use the forceInclude option to pass in a list of packages that you want included. For example, to include mysql use the following:

custom:
  bundle:
    forceInclude
      - mysql

sharp

The sharp package needs to include a specific binary before package. Use the packagerOptions.scripts for this.

custom:
  bundle:
    packagerOptions:
      scripts:
        - rm -rf node_modules/sharp && npm install --arch=x64 --platform=linux --target=10.15.0 sharp

pg

The pg package optionally includes pg-native that needs to be ignored from Webpack. Use the ignorePackages option to do this.

custom:
  bundle:
    ignorePackages:
      - pg-native

redis

The redis package optionally includes hiredis that needs to be ignored from Webpack. Use the ignorePackages option to do this.

custom:
  bundle:
    ignorePackages:
      - hiredis

Sequelize

To use the Sequelize package along with pg, you'll need to ignore it from Webpack and using the dialectModule option. Read more here.

In your serverless.yml:

custom:
  bundle:
    ignorePackages:
      - pg-native

And in your Lambda code:

const sequelize = new Sequelize(
  process.env.DB_NAME,
  process.env.DB_USERNAME,
  process.env.DB_PASSWORD,
  {
    host: process.env.DB_HOST,
    dialect: process.env.DB_DIALECT,
    dialectModule: pg
  }
);

Nested Services

It's common in Serverless monorepo setups that the plugins are installed at the root level and referenced in the individual services. Take the following project setup:

package.json          // Here serverless-bundle is installed
/service1 
  |- package.json     // Can run npm test from here, referring to parent `package.json`
  |- handler.js
  |- handler.test.js
  |- serverless.yml   // Uses serverless-bundle plugin
/service2
  |- package.json     // Can run npm test from here, referring to parent `package.json`
  |- handler.js
  |- handler.test.js
  |- serverless.yml   // Uses serverless-bundle plugin

Running Serverless commands (deploy, package, etc.) from the services directories are supported out of the box. To get your tests to run correctly, you need to do the following.

In the root package.json use the following test script:

"scripts": {
  "test": "serverless-bundle test"
}

And in service1/package.json use this test script:

"scripts": {
  "test": "npm --prefix ./../ test service1"
},

This tells serverless-bundle (in the root) to only run the tests inside the service1/ directory. As opposed to the entire project.

Support

  • Open a new issue if you've found a bug or have some suggestions.
  • Or submit a pull request!

Running Locally

To run this project locally, clone the repo and initialize the project.

$ git clone https://github.com/AnomalyInnovations/serverless-bundle
$ cd serverless-bundle
$ npm install

Run the tests using.

$ npm test

To test the serverless-bundle test command.

$ npm run test-scripts

To install locally in another project.

$ npm install /path/to/serverless-bundle

Thanks

This plugin would not be possible without the amazing serverless-webpack plugin and the ideas and code from Create React App.


This plugin is maintained by Anomaly Innovations; makers of Seed and Serverless Stack.