Skip to content

Latest commit

 

History

History
147 lines (111 loc) · 5.02 KB

README.md

File metadata and controls

147 lines (111 loc) · 5.02 KB

📦 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.

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

Table of contents

📥 Install

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

🔧 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 🐛 known issue.

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.

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.

📚 Examples

📦 NPM

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

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 : string[] | boolean

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

// package.json
{
  "files": ["src"],
  "bundleDependencies": true
}
# 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

🔷 Typescript

⚡ SWC

💻 Development

git clone [email protected]:asd-xiv/serverless-universal-packer.git asd14.serverless-shell-packer

📜 Changelog

See the releases section for details.