An open API service indexing awesome lists of open source software.

https://github.com/asd-xiv/serverless-universal-packer

📦 Serverless plugin for custom packaging using BASH scripts with little to no dependencies.
https://github.com/asd-xiv/serverless-universal-packer

bash serverless serverless-offline serverless-package serverless-plugin

Last synced: 9 months ago
JSON representation

📦 Serverless plugin for custom packaging using BASH scripts with little to no dependencies.

Awesome Lists containing this project

README

          


:package: serverless-universal-packer




CircleCI


Coverage Status


Dependencies


NPM Version


Semantic Release with Conventional Commits

> Serverless plugin for custom packaging using BASH scripts with little to no
> dependencies.

- :hammer_and_wrench: **Flexibility**: Don't rely on the existence of
specialized plugins interfacing bundler X. Easily pivot when a better suited
builder comes out.
- :green_square: **Low complexity**: Specialized plugins mostly just proxy to
the underlying bundler. You can do that yourself in a few command lines.
- :repeat: **Stay Updated**: Keep dependencies updated without waiting for
plugin updates.

## Table of contents

- [:inbox_tray: Install](#inbox_tray-install)
- [:wrench: Custom BASH scripts](#wrench-custom-bash-scripts)
- [`npm-pack-ws-fix`](#npm-pack-ws-fix)
- [`convert-to-aws-zip`](#convert-to-aws-zip)
- [:books: Examples](#books-examples)
- [:package: NPM](#package-npm)
- [:large_blue_diamond: Typescript](#large_blue_diamond-typescript)
- [:zap: SWC](#zap-swc)
- [:computer: Development](#computer-development)
- [:scroll: Changelog](#scroll-changelog)

## :inbox_tray: Install

```bash
npm install --save-dev serverless-universal-packer
```

## :wrench: Custom BASH scripts

### `npm-pack-ws-fix`

Currently running `npm pack` inside a workspace/monorepo package will not
include dependencies hoisted to the root `node_modules` folder. This is a
[:bug: known issue](https://github.com/npm/cli/issues/3466).

This script is a temporary workaround until the issue is fixed. It's meant to be
run inside a child package folder, and will create a `.tgz` file in the root
folder.

Internally it copies missing dependencies from the root `node_modules` into
child package `node_modules` and runs `npm pack`. After the package is created,
the original child `node_modules` is restored.

```bash
cd packages/my-package
npx npm-pack-ws-fix
```

### `convert-to-aws-zip`

AWS Lambda requires a `.zip` file containing the `package.json` and the
`node_modules` folder.

`npm-pack-ws-fix`, which internaly uses `npm pack`, creates a `.tgz` file with
an extra folder, `package`, containing the package files. This script extracts
the `.tgz` file and recreates the `.zip` without the extra folder.

## :books: Examples

### :package: NPM

Without any additional packages, NPM provides a built-in mechanic to package
your code using [`npm pack`][examples_npm_npm-pack]. This will create a `.tgz`
file in the root of your project.

#### [`files`][examples_npm_files] : `string[]`

> The optional files field is an array of file patterns that describes the
> entries to be included when your package is installed as a dependency

#### [`bundleDependencies`][examples_npm_bundled-dependencies] : `string[] | boolean`

> This defines an array of package names that will be bundled when publishing
> the package.

[examples_npm_npm-pack]: https://docs.npmjs.com/cli/v9/commands/npm-pack
[examples_npm_files]:
https://docs.npmjs.com/cli/v9/configuring-npm/package-json#files
[examples_npm_bundled-dependencies]:
https://docs.npmjs.com/cli/v9/configuring-npm/package-json#bundledependencies

```json
// package.json
{
"files": ["src"],
"bundleDependencies": true
}
```

```yaml
# serverless.yml
plugins:
- serverless-shell-packer

custom:
shellPacker:
script:
- tgz_path=$(npx npm-pack-ws-fix | tail -n 1)
- npx convert-to-aws-zip "$tgz_path" | tail -n 1
```

### :large_blue_diamond: Typescript

### :zap: SWC

## :computer: Development

```bash
git clone git@github.com:asd-xiv/serverless-universal-packer.git asd14.serverless-shell-packer
```

## :scroll: Changelog

See the [releases section][changelog_releases] for details.

[changelog_releases]:
https://github.com/asd-xiv/serverless-universal-packer/releases