This is a demo of a QCObjects based front-end Progressive Web App
You can view the result of this project opening QCObjects Demo App on any browser.
The following is the project structure of a Progressive Web App made in QCObjects
.
├── backend
├── spec
│ └── support
└── src
├── css
│ ├── components
│ │ └── hero
│ ├── desktop
│ │ └── components
│ ├── mobile
│ │ └── components
│ └── theme
│ ├── basic
│ ├── cyan
│ ├── redlight
│ └── xtra
├── img
│ ├── icons
│ └── screenshots
├── js
│ └── packages
└── templates
└── components
├── hero
└── pages
In index.html file, you will find this script:
<script type="module" src="js/init.js"></script>
In the init.js file, you will find the main front-end settings:
CONFIG.set("sourceType", "module");
CONFIG.set("relativeImportPath", "js/packages/");
CONFIG.set("componentsBasePath", "templates/components/");
CONFIG.set("delayForReady", 1); // delay to wait before executing the first ready event, it includes imports
CONFIG.set("preserveComponentBodyTag", false); // don't use <componentBody></componentBody> tag
CONFIG.set("useConfigService", false); // Load settings from config.json
CONFIG.set("routingWay","hash"); // routingWay possible values are 'hash','pathname','search'
CONFIG.set("useLocalSDK",true); // on the frontend side you can chose whether to load the SDK from sdk.qcobjects.dev or from your local website
CONFIG.set("tplextension","tpl.html"); // this is the file extension to locate the template files (if component.name = 'main' then template name will be main.tpl.html)
CONFIG.set("asynchronousImportsLoad",true); // it is recommended to load the Import declarations in an asyncronous way
CONFIG.set("serviceWorkerURI","/sw.js"); //QCObjects will register an launch this service worker automatically to work offline
In package.json file, in scripts section, you will find some common commands that need to be present in every project that works with QCObjects.
# Run tests
The "test" script uses the "eslint" linter and the "jasmine" framework to check the code for errors and run tests. If any errors are found, the script tries to fix them automatically. If all tests pass, the script exits with code 0.
# Executes the tests of the project (see spec and coverage folders)
npm run test
# Run sync
The "sync" script stages and commits any changes made to the codebase. This is useful for keeping track of changes and making sure everything is up-to-date.
# Syncronizes the version between npm and git
npm run sync
The "preversion" script runs "npm i --upgrade" and "npm test" before a new version of the package is published. This ensures that the latest version of the code is tested and ready to be released.
# This command is executed before a npm version is changed
npm run preversion
The "postversion" script pushes the changes to the codebase and tags the new version. This helps keep track of the changes made to the code over time.
# This command is executed after a npm version is changed
npm run postversion
The "coverage" script generates a code coverage report using the "nyc" library. This is useful for understanding how much of the code is being tested and where there may be gaps in test coverage.
# You can run this command to dispatch the coverage scripts (see coverage folder)
npm run coverage
# Env file .env
export ENGINE_NAME=sqlite3
export DATABASE_NAME=admin.db
# Example: admin
export DEFAULT_USER=admin
# Example: admin123
export DEFAULT_PASSWORD=admin123
export MICROSOFT_API_KEY=<Get the key from Azure Platform>
export GOOGLE_API_KEY=<Get the key from GCP>
The "start" script runs the "createcert" and "serve" scripts. This is useful for quickly launching the app and getting started with development.
# Start the QCObjects Server
npm run start
The "serve" and "server" scripts launch the app using the "qcobjects" library. This is the main tool used in the development process.
# An alias to start the QCObjects Server
npm run serve
# An alias to start the QCObjects Server
npm run server
The "start:dev" script will build, publish and start the server using npm-watch.
# Start the QCObjects Server
npm run start:dev
The "collab" script launches the collaborative coding tool "qcobjects-collab". This is useful for working with other developers on the same codebase.
# This command will open a shell with QCObjects Collab Tool
npm run collab
The "shell" script launches a shell terminal using the "qcobjects" library. This is useful for running commands and making changes to the codebase.
# This command will open a shell with QCObjects running
npm run shell
The "createcert" script creates a certificate used for HTTPS connections. This is important for security reasons. It uses letsencrypt certificate or openssl depending on settings. Default is openssl.
# This command will create a certificate for ssl
npm run createcert
The "v-patch", "v-minor", and "v-major" scripts increment the version number of the package based on patch, minor or major changes. This is useful for keeping track of the changes made to the code over time.
npm run v-patch -m "message of commit" --git --npm
Install QCObjects CLI in local in order to use local dependencies and local settings of your project.
# This command will install QCObjects CLI in your local project
npm i --save-dev qcobjects-cli
The "qcobjects" script launches the "qcobjects" library command-line interface. This is the main tool used in the development process.
# This command will execute QCObjects CLI in your local project and show the version installed
npm run qcobjects -- --version
# To learn more about CLI commands, you can use the --help option
npm run qcobjects -- --help
# To learn more about CLI commands, you can use the --help option
npm run qcobjects -- create --help
The "http-server" script starts an HTTP server using the "qcobjects-cli" library. This is useful for testing the app in a local environment.
npm run http-server
The "gae-server" script starts a Google App Engine HTTP server using the "qcobjects-cli" library. This is useful for deploying the app to production.
Use this command in the settings of your GAE Application instead of "npm start"
npm run gae-server
The "build:ts" script compiles the TypeScript code and runs the linter to fix any issues. This is useful for ensuring that the code is properly formatted and free of errors.
The "build:ts-types" script generates TypeScript type declarations for the codebase. This is useful for making sure that the code is properly typed and free of errors.
# This command will be implemented in the future for TypeScript
npm run build
The "publish:local" script publishes the package locally using the "qcobjects" library. This is useful for testing the app in a local environment.
Finally, the "prepare" script installs the "husky" library, which is used to manage Git hooks. This is useful for automating tasks in the development process.
To run this app with docker, execute the following command:
docker run -p 8080:8080 -p 8443:8443 --name qcobjects-newapp -d qcobjects/qcobjects-newapp
Then go to https://127.0.0.1:8443/
To properly configure the application, please refer to the CONFIG.md
file for detailed information on each configuration field. Follow these steps:
- Open the configuration file: The main configuration file is
config.json
. QCObjects will prioritizeconfig.json
if it is present. Ifconfig.json
is not available, it will look forconfig.yaml
orconfig.yml
. If both JSON and YAML files are present, the YAML file will be considered, and the other files will be dismissed. - Refer to
CONFIG.md
: For a detailed explanation of each field in the configuration file, consult theCONFIG.md
file. This document provides descriptions, possible values, and examples for each configuration option. - Update the settings: Modify the fields in the configuration file as per your requirements, using the guidance provided in
CONFIG.md
. - Save your changes: Ensure that all changes are saved before running the application.