Giter Club home page Giter Club logo

one-app's Introduction

One App - One Amex

One App Docker Release

One App is a fresh take on web application development. It consists of a Node.js server that serves up a single page app built using React components and makes use of Holocron to allow for code splitting via independently developed, tested, and deployed Holocron Modules.

Our goal is to provide a web application framework for building fast, scalable, secure, and modular experiences. Leave the tooling to us and focus on what matters - delivering performant, maintainable experiences to your users.

While American Express has been using One App in production since 2016, this open source iteration of the framework is in a soft launch state. There will be a full documentation site forthcoming.

👩‍💻 Hiring 👨‍💻

Want to get paid for your contributions to one-app?

Send your resume to [email protected]

📖 Table of Contents

✨ Features

  • Modular design allowing for groups of UI components to be independently developed, tested, and deployed.
  • Server side rendering as a first class citizen.
  • Easy configuration management.
  • Built-in internationalization.
  • Built-in dynamic routing.

🤹‍ Usage

Quick Start

Build a Module with generator-one-app-module

The easiest way to do this is via npx (comes with npm versions 5.2.0 and above). Run the following command in the directory you want your module to live:

export NODE_ENV=development
npx -p yo -p @americanexpress/generator-one-app-module -- yo @americanexpress/one-app-module

This will use the One App Module Generator to generate a basic One App module.

Clone and Install One App

export NODE_ENV=development
git clone https://github.com/americanexpress/one-app.git
cd one-app
npm ci --no-optional

Serve your Module to One App

At the root of your one-app repo, run:

npm run serve-module <local-path-to-generated-module>
# e.g. npm run serve-module ../my-first-module

The serve-module command generates a static folder in the one-app root directory, containing a module-map.json and a modules folder with your bundled module code:

one-app/static
├── module-map.json
└── modules
    └── my-first-module
        └── 1.0.0
            ├── my-first-module.browser.js
            ├── my-first-module.browser.js.map
            ├── my-first-module.legacy.browser.js
            ├── my-first-module.legacy.browser.js.map
            ├── my-first-module.node.js
            └── my-first-module.node.js.map

Paired with the built-in one-app-dev-cdn library, you're able to utilize the Holocron Module Map while running your entire One App instance locally. No need to deploy and fetch remote assets from a CDN at this step.

Declare the module as your Root Module and start One App:

Start up One App and declare your new module as the Root Module:

npm start -- --root-module-name=<module-name>
# e.g. npm start -- --root-module-name=my-first-module

This starts One App and makes it available at http://localhost:3000/ where you can see it in action!

Open another terminal window, run npm run watch:build in your module's directory and make some edits to the module. One App will pick up these changes and update the module bundles accordingly. When you reload your browser window, One App will be displaying your updated module.

The Root Module

The root module serves as the entry point for one-app to load an application.

          | ------ your application ------- |
* one-app -> root-module -> [other modules] |
          | ------------------------------- |

It is possible for your application to consist of only the root module, however most application will want to take advantage of code splitting using Holocron and have the root module load other modules. More on this in the Routing section in the API docs.

For a module to act as the root module the only requirements are:

📘 More Information

👩‍🍳 Recipes

Recipes feature our guided tutorials and walkthroughs of building Holocron Modules and running the one-app Server runtime.

Please visit our Recipe Docs.

🎛️ API

Our API Docs break down each part of our public APIs for One App and its supporting libraries (e.g. Holocron, one-app-ducks, etc).

Please visit our API Docs.

🏆 Contributing

We welcome Your interest in the American Express Open Source Community on Github. Any Contributor to any Open Source Project managed by the American Express Open Source Community must accept and sign an Agreement indicating agreement to the terms below. Except for the rights granted in this Agreement to American Express and to recipients of software distributed by American Express, You reserve all right, title, and interest, if any, in and to Your Contributions. Please fill out the Agreement.

Please see our CONTRIBUTING.md.

🗝️ License

Any contributions made under this project will be governed by the Apache License 2.0.

🗣️ Code of Conduct

This project adheres to the American Express Community Guidelines. By participating, you are expected to honor these guidelines.

one-app's People

Contributors

francois-esquire avatar jadshead avatar anescobar1991 avatar nellyk avatar narmeennaveedahmed avatar infoxicator avatar 10xlacroixdrinker avatar shivaylamba avatar stephaniecoates avatar brantmullinix avatar pixnbits avatar patneedham avatar oneamexbot avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.