Git Product home page Git Product logo

tja0112 / vue-fullstack-starter Goto Github PK

View Code? Open in Web Editor NEW

This project forked from shyam-chen/vue-starter

0.0 1.0 0.0 1.37 MB

:poodle: A boilerplate for Vue, Material, Express, Babel, Flow, and ReactiveX. Vuex | Router | Sync | Vuetify | I18n | PWA | SEO | RxJS | JSX | PostCSS | ESLint | StyleLint | Airbnb | Jest | Puppeteer | Supertest | Testing | Unit | E2E | CRUD | REST | GraphQL | Serverless | Firebase | Hosting | Functions | FaaS | Modular | CLI | Apollo | Gulp | Webpack

License: MIT License

JavaScript 42.19% Vue 55.95% CSS 0.32% HTML 1.54%

vue-fullstack-starter's Introduction

Vue Fullstack Starter

๐Ÿฉ A boilerplate for Vue, Material, Express, Babel, Flow, and ReactiveX.

Build Status Coverage Status // dependencies Status devDependencies Status

๐ŸŒˆ Live Demo: Dev Mode | Prod Mode

Table of Contents

Getting Started

Follow steps to execute this boilerplate.

  1. Clone this Boilerplate
$ git clone --depth 1 https://github.com/Shyam-Chen/Vue-Fullstack-Starter <PROJECT_NAME>
$ cd <PROJECT_NAME>
  1. Install Dependencies
$ yarn install

# install flow types
$ yarn typed
  1. Run the code
# front-end
$ yarn start:app

# back-end
$ yarn start:api
  1. Build the code
# front-end
$ yarn build:app

# back-end
$ yarn build:api
  1. Check the code
# scripts
$ yarn lint:js

# styles
$ yarn lint:css
  1. Run the test
# front-end
$ yarn test:app

# back-end
$ yarn test:api
  1. Run the e2e
# ui
$ yarn e2e:app

# http
$ yarn e2e:api

Project Template

Generate a blank project via Vue CLI.

  1. Install Vue CLI
$ yarn global add vue-cli
  1. Create a project
$ vue init Shyam-Chen/Vue-Fullstack-Template <PROJECT_NAME>
  1. Start your journey
$ cd <PROJECT_NAME>
$ yarn install && yarn typed
$ yarn start:app
$ yarn start:api

๐Ÿšฆ Project template repository can be accessed from here.

Dockerization

Dockerize an application.

  1. Build and run the container in the background
$ docker-compose up -d <SERVICE>
  1. Run a command in a running container
$ docker-compose exec <SERVICE> <COMMAND>
  1. Remove the old container before creating the new one
$ docker-compose rm -fs
  1. Restart up the container in the background
$ docker-compose up -d --build <SERVICE>
  1. Push images to Docker Cloud
$ docker login
$ docker build -f tools/Dockerfile.<dev|prod> -t <IMAGE_NAME>:<IMAGE_TAG> .

# checkout
$ docker images

$ docker tag <IMAGE_NAME>:<IMAGE_TAG> <DOCKER_ID_USER>/<IMAGE_NAME>:<IMAGE_TAG>
$ docker push <DOCKER_ID_USER>/<IMAGE_NAME>:<IMAGE_TAG>

# remove
$ docker rmi <IMAGE_ID>
  1. Pull images from Docker Cloud
# docker-compose.yml

  <dev|prod>:
-   image: <dev|prod>
-   build:
-     context: .
-     dockerfile: tools/Dockerfile.<dev|prod>
+   image: <DOCKER_ID_USER>/<IMAGE_NAME>:<IMAGE_TAG>
    volumes:
      - yarn:/home/node/.cache/yarn
    tty: true

Configuration

Project environments

Change to your project.

// .firebaserc
{
  "projects": {
    "development": "<PROJECT_NAME>",
    "production": "<PROJECT_NAME>"
  }
}

Default environments

Set your local environment variables. (use this.<ENV_NAME> = process.env.<ENV_NAME> || <LOCAL_ENV>;)

// env.js
function Environments() {
  this.NODE_ENV = process.env.NODE_ENV || 'development';

  this.PROJECT_NAME = process.env.PROJECT_NAME || '<PROJECT_NAME>';

  this.SITE_PORT = process.env.SITE_PORT || 8000;
  this.SITE_URL = process.env.SITE_URL || `http://localhost:${this.SITE_PORT}`;

  this.FUNC_PORT = process.env.FUNC_PORT || 5000;
  this.FUNC_URL = process.env.FUNC_URL || `http://localhost:${this.FUNC_PORT}/${this.PROJECT_NAME}/us-central1`;

  this.FIREBASE_CONFIG = process.env.FIREBASE_CONFIG || {
    apiKey: '<API_KEY>',
    authDomain: '<AUTH_DOMAIN>',
    databaseURL: '<DATABASE_URL>',
    projectId: '<PROJECT_ID>',
    storageBucket: '<STORAGE_BUCKET>',
    messagingSenderId: '<MESSAGING_SENDER_ID>',
  };

  this.GOOGLE_ANALYTICS = process.env.GOOGLE_ANALYTICS || 'UA-84381641-2';

  this.SENTRY_DSN = process.env.SENTRY_DSN || null;
  this.RENDERTRON_URL = process.env.RENDERTRON_URL || null;
}

Deployment environment

Set your deployment environment variables.

# tools/Dockerfile.<dev|prod>

# envs --
ENV SITE_URL <SITE_URL>
ENV FUNC_URL <FUNC_URL>

ENV SENTRY_DSN <SENTRY_DSN>
# -- envs

SEO friendly

Enable billing on your Firebase Platform and Google Cloud the project by switching to the Blaze plan.

Serve dynamic content for bots.

// firebase.json
    "rewrites": [
      {
        "source": "**",
-       "destination": "/index.html"
+       "function": "app"
      }
    ],

Deploy rendertron instance to Google App Engine.

$ git clone https://github.com/GoogleChrome/rendertron
$ cd rendertron
$ gcloud auth login
$ gcloud app deploy app.yaml --project <RENDERTRON_NAME>

Set your rendertron instance in deployment environment.

# tools/Dockerfile.<dev|prod>

# envs --
ENV RENDERTRON_URL <RENDERTRON_URL>
# -- envs

VS Code settings

{
  "window.zoomLevel": 1,
  "workbench.colorTheme": "Material Theme",
  "workbench.iconTheme": "material-icon-theme",
  "eslint.validate": [
    "javascript", {
      "language": "vue"
    },
    "javascriptreact",
    "html"
  ],
  "javascript.validate.enable": false,
  "vetur.validation.script": false
}

Directory Structure

.
โ”œโ”€โ”€ src
โ”‚   โ”œโ”€โ”€ api
โ”‚   โ”‚   โ”œโ”€โ”€ config  -> config middlewares
โ”‚   โ”‚   โ”œโ”€โ”€ graphql
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ <FEATURE>
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ __tests__
โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ ...
โ”‚   โ”‚   โ”œโ”€โ”€ <FEATURE>
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ __tests__
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”‚   โ””โ”€โ”€ index.js
โ”‚   โ”œโ”€โ”€ app
โ”‚   โ”‚   โ”œโ”€โ”€ _languages  -> app languages
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”‚   โ”œโ”€โ”€ config  -> config plugins
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”‚   โ”œโ”€โ”€ <FEATURE>
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ __tests__
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ actions.spec.js
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ <FEATURE>.e2e-spec.js
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ <FEATURE>.spec.js
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ getters.spec.js
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ mutations.spec.js
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ _languages  -> <FEATURE> languages
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ actions.js
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ constants.js
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ <FEATURE>.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ getters.js
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ mutations.js
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ types.js
โ”‚   โ”‚   โ”œโ”€โ”€ actions.js  -> root actions
โ”‚   โ”‚   โ”œโ”€โ”€ App.vue  -> app root
โ”‚   โ”‚   โ”œโ”€โ”€ constants.js  -> root constants
โ”‚   โ”‚   โ”œโ”€โ”€ getters.js  -> root getters
โ”‚   โ”‚   โ”œโ”€โ”€ mutations.js  -> root mutations
โ”‚   โ”‚   โ””โ”€โ”€ types.js  -> root types
โ”‚   โ”œโ”€โ”€ assets  -> datas, fonts, images, medias, styles
โ”‚   โ”œโ”€โ”€ client.js
โ”‚   โ”œโ”€โ”€ index.html
โ”‚   โ””โ”€โ”€ server.js
โ”œโ”€โ”€ tools
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ .babelrc
โ”œโ”€โ”€ .editorconfig
โ”œโ”€โ”€ .eslintrc
โ”œโ”€โ”€ .firebaserc
โ”œโ”€โ”€ .flowconfig
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ .postcssrc
โ”œโ”€โ”€ .stylelintrc
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ LICENSE
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ circle.yml
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ env.js
โ”œโ”€โ”€ firebase.json
โ”œโ”€โ”€ gulpfile.js
โ”œโ”€โ”€ jest.config.js
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ webpack.config.js
โ””โ”€โ”€ yarn.lock

vue-fullstack-starter's People

Contributors

shyam-chen 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.