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

@bafsllc/nx-serverless

v0.0.40

Published

Serverless schematics for nx workspace

Downloads

125

Readme

License

serverless @flowaccount/nx-serverless NPM Version Typescript CircleCI

What is Nx

🔎 Extensible Dev Tools for Monorepos.

What is @flowaccount/nx-serverless

🔎 Extensible Continous Delivery/Depolyment Tools on top of Nx workspace for Serverless Framework. Because on multiple lambda in one repository is an awesome thing!

Our Mission

Simplify any workflow that can be abstracted into one command using the same configuration structure as angular.json, workspace.json or nx.json. Make development life-cycle easier, more effective and having less rituals. Communication through configurations and not documentations.

Feature sets to support for Serverless Framework

Frameworks Schematics

| Framework Name | AWS | Azure | GCP | | --------------------------------------- | ------------------ | ---------- | ---------- | | Node-Typescript (Webpack) | :white_check_mark: | :calendar: | :calendar: | | Angular Universal (Typescript-compiler) | :white_check_mark: | :calendar: | :calendar: | | Express-js (Typescript-compiler) | :white_check_mark: | :calendar: | :calendar: |

Serverless Framework Commands

| Command Names | AWS | Azure | GCP | | ------------------ | ------------------ | ---------- | ---------- | | Deploy | :white_check_mark: | :calendar: | :calendar: | | Destroy | :white_check_mark: | :calendar: | :calendar: | | Sls Command | :white_check_mark: | :calendar: | :calendar: | | Serverless-offline | :white_check_mark: | :calendar: | :calendar: |

Supported Serverless Framework Versions

| Versions | Status | | -------- | ------------------ | | 1.0+ | :white_check_mark: | | 2.0+ | :white_check_mark: |

Builders wrapped before packaging/deployment

| Builder Names | | | ------------------- | ------------------ | | Webpack compiler | :white_check_mark: | | Typescript compiler | :white_check_mark: |

Whats special about the plugin is that, you DO NOT need to use serverless-wepack or serverless-typescript plugins anymore! The library uses angular builders to build or typescript compilers to compile your code for you into javascript before packaging them into a zip file and deploy them to the serverless cloud.

Package.json dependency resolvers

| Resolver Names | | | -------------- | ------------------ | | Webpack stats | :white_check_mark: | | Depcheck | :white_check_mark: |

The other special thing that the library does is, it uses webpack stats to build up your dependencies and write a package.json into your dist folder in the attempt to minimize the amount of dependencies in your node_modules needed to be uploaded to the cloud.

For typescript compilers it uses dep-checks to resolve the dependencies and write up a package.json file

Getting Started

To Deploy an Existing Angular Application adding Ng-Universal in the process

First you need to create an nx workspace to get started!

Using npx

npx create-nx-workspace # Then you got to use yarn/npm
// if start with angular presets
nx add @flowaccount/nx-serverless # or with these options --project=my-app --provider=aws --addUniversal=yes
// else
npm install @flowaccount/nx-serverless --save-dev

Using npm

npm init nx-workspace
// if start with angular presets
npm run nx add @flowaccount/nx-serverless # or with these options --project=my-app --provider=aws --addUniversal=yes
// else
npm install @flowaccount/nx-serverless --save-dev

Using yarn

yarn create nx-workspace
// if start with angular presets
yarn nx add @flowaccount/nx-serverless # or with these options --project=my-app --provider=aws --addUniversal=yes
// else
yarn add --dev @flowaccount/nx-serverless

Deploying/Compiling application (Assuming you have nx added globally, otherwise use npx/npm/yarn!)

nx run my-app:offline # to run the universal app offline checking serverless works locally
nx deploy my-app # to deploy the app
nx run my-app:destroy # to destroy the app
nx run my-app:compile # to compile only the serverless part of the app

Running custom sls commands application (Assuming you have nx added globally, otherwise use npx/npm/yarn!)

nx run my-app:sls # to run the custom sls commands as per what you need!

To Create and Deploy Node-Typescript Serverless Application

Using npx

npx create-nx-workspace # Then you got to use yarn/npm
nx g @flowaccount/nx-serverless:api-serverless --name=myapi --provider=aws

Using npm

npm init nx-workspace
nx g @flowaccount/nx-serverless:api-serverless --name=myapi --provider=aws

Using yarn

yarn create nx-workspace
nx g @flowaccount/nx-serverless:api-serverless --name=myapi --provider=aws

Deploying/Compiling application (Assuming you have nx added globally, otherwise use npx/npm/yarn!)

nx serve myapi --port=7777 # to serve the api locally on port 7777
nx deploy myapi --stage=dev# to deploy the api
nx build myapi # to build the api

To Debug your deployments Edit the env.json files generated by the schematics. change SLS_DEBUG to true

To ship your assets (html,css,js,img etc)

   "assets": [
              "apps/app/src/favicon.ico",
              "apps/app/src/robots.txt",
              "apps/app/src/manifest.webmanifest",
              {
                "glob": "**/*",
                "input": "libs/shared/ui-theme/assets",
                "output": "./assets"
              }
  ],

For Node-Typescript Api Application

the resulting file tree will look like this:

<workspace name>/
├── apps/
│   ├── myapi/
|   ├────────src/handler.ts
|   ├────────jest.config.js
|   ├────────tsconfig.json
|   ├────────serverless.yml
|   ├────────tsconfig.app.json
|   ├────────tsconfig.spec.json
|   ├────────tslint.json
├── libs/
├── tools/
├── nx.json
├── package.json
├── tsconfig.json
└── tslint.json

you workspace.json will be added with these

"build": {
  "builder": "@flowaccount/nx-serverless:build",
  "configurations": {
   ...
  },
  "options": {
    ...
  }
},
"deploy": {
  "builder": "@flowaccount/nx-serverless:deploy",
  "options": {
    "waitUntilTargets": ["myapi:some-other-builder"],
    "buildTarget": "myapi:build:production",
    "config": "apps/myapi/serverless.yml",
    "location": "dist/static/apps/myapi",
    "package": "dist/static/apps/myapi"
  },
    "configurations": {
    "staging": {
      "buildTarget": "myapi:build:staging",
      "waitUntilTargets": ["myapi:some-other-builder:staging"],
      "stage": "staging"
    },
    "production": {
      "buildTarget": "myapi:build:production",
      "waitUntilTargets": ["myapi:some-other-builder:production"],
      "stage": "production"
    }
  }
},
"destroy": {
  "builder": "@flowaccount/nx-serverless:destroy",
  "options": {
   ...
  }
},
"sls": {
  "builder": "@flowaccount/nx-serverless:sls",
  "options": {
    ...
  }
 }
}
"lint": {
  "builder": "@angular-devkit/build-angular:tslint",
  "options": {
   ...
  }
},
"serve": {
  "builder": "@flowaccount/nx-serverless:offline",
  "configurations": {
    ...
  },
  "options": {
    ...
  }
},
"test": {
  "builder": "@nrwl/jest:jest",
  "options": {
    ...
  }
 }
}

For Expressjs/Angular Universal Application

the resulting file tree will look like this:

<workspace name>/
├── apps/
│   ├── my-app/
|   ├───────────────handler.ts
|   ├───────────────serverless.yml
|   ├───────────────tsconfig.serverless.json
├── libs/
├── tools/
├── nx.json
├── package.json
├── tsconfig.json
└── tslint.json

The existing angular project in workspace.json/angular.json will be updated with these sections

"compile": {
  "builder": "@flowaccount/nx-serverless:compile",
  "configurations": {
   ...
  },
  "options": {
   ...
  }
},
"deploy": {
  "builder": "@flowaccount/nx-serverless:deploy",
  "options": {
    ...
  }
},
"destroy": {
  "builder": "@flowaccount/nx-serverless:destroy",
  "options": {
  ...
  }
},
"offline": {
  "builder": "@flowaccount/nx-serverless:offline",
  "configurations": {
   ...
  },
  "options": {
   ...
  }
 }
}
"sls": {
        "builder": "@flowaccount/nx-serverless:sls",
        "options": {
          "waitUntilTargets": [],
          "buildTarget": "my-app:build:production",
          "config": "apps/my-app/serverless.yml",
          "location": "dist/apps/my-app",
          "package": "dist/apps/my-app",
          "command": "package",
         },
        "configurations": {
          "deploy-dev": {
            "buildTarget": "my-app:build:dev",
            "command": "deploy",
            "stage": "dev"
          },
            "deploy-production": {
            "buildTarget": "my-app:build:production",
            "command": "deploy",
            "stage": "prod"
          }
        }
    }

Want to help?

You are most welcome to help! Please file a bug or submit a PR, read the guidelines for contributing and start right on!