Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nodefony/nodefony-starter
Nodefony Starter Node.js Framework
https://github.com/nodefony/nodefony-starter
babel cors framework http2 javascript monitoring mvc-framework node-js nodefony orm-framework passportjs pm2 realtime sequelize sockjs symfony twig webpack websocket
Last synced: 18 days ago
JSON representation
Nodefony Starter Node.js Framework
- Host: GitHub
- URL: https://github.com/nodefony/nodefony-starter
- Owner: nodefony
- Created: 2014-10-07T07:26:34.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2024-02-27T18:50:21.000Z (10 months ago)
- Last Synced: 2024-05-02T05:25:41.084Z (8 months ago)
- Topics: babel, cors, framework, http2, javascript, monitoring, mvc-framework, node-js, nodefony, orm-framework, passportjs, pm2, realtime, sequelize, sockjs, symfony, twig, webpack, websocket
- Language: JavaScript
- Homepage: https://nodefony.net
- Size: 66.1 MB
- Stars: 92
- Watchers: 12
- Forks: 9
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
NODEFONY V7
[![npm package](https://nodei.co/npm/nodefony.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/nodefony)
[![Issues Status](https://img.shields.io/github/issues/nodefony/nodefony.svg)](https://github.com/nodefony/nodefony/issues) [![Build Status](https://github.com/nodefony/nodefony/workflows/nodefony/badge.svg)](https://github.com/nodefony/nodefony/actions) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/495/badge)](https://bestpractices.coreinfrastructure.org/projects/495)
Nodefony is Node.js full-stack web framework.
Nodefony can be used to develop a complete solution to create a Fullstack Web Application, Secure Api, or Microservices.
## Table of content
- [Features](#features)
- [Requirements](#requirements)
- [Linux OSX Installation](#install)
- [Windows Installation ](#installwin32)
- [Build Nodefony Project with CLI (Command Line Interface)](#buildcli)
- [Build Nodefony Project with STARTER](#buildstarter)
- [Start Development Mode](#start)
- [Start Production Mode](#start_prod)
- [Configurations](#configurations)
- [Quick Start](#bundles)
- [HTTPS Access](#https)
- [References / Thanks](#references--thanks)
- [Authors](#authors)
- [License](#license)
- [Demo](#demo)- Servers ([http(s)](https://nodejs.org/dist/latest-v8.x/docs/api/https.html), [websocket(s)](https://github.com/theturtle32/WebSocket-Node), statics, sockjs)
- [HTTP2](https://nodejs.org/api/http2.html) ready node module provides an implementation of the HTTP/2 (push server ready).
- Dynamics routing
- ORM [Sequelize](http://docs.sequelizejs.com)
- ORM [mongoose](http://mongoosejs.com/index.html)
- Simple Databases Services connections (Redis, Mongo, Elasticsearch, mysql, sqlite ...).
- MVC Templating Server Side ([Twig](https://github.com/twigjs/twig.js))
- Notion of real-time context in Action Controller (websocket).
- Notion of synchronous or asynchronous execution in Action Controller (Promise, Async, Await).
- Services Containers, Dependency Injection (Design Patterns)
- Sessions Manager (ORM, Memcached)
- Authentication Manager (Digest, Basic, oAuth, Local, ldap, jwt, openid, passportjs)
- WAF ( Web application firewall )
- Cross-Origin Resource Sharing ([CORS](https://www.w3.org/TR/cors/))
- Production Management ([PM2](https://github.com/Unitech/pm2/))
- RealTime API ([Bayeux Protocol](http://autogrowsystems.github.io/faye-go/))
- Webpack Assets management (Like WDS with HMR hot module Replacement)
- C++ Addons (Binding in Bundle)
- Translations
- CLI (Command Line Interface)
- Monitororing , Debug Bar
- Unit Test Api in framework context ([MOCHA](https://mochajs.org/))**Nodefony assimilates into the ecosystem of node.js with services like** :
- [WEBPACK](https://webpack.js.org/) Module bundler for assets management of application .
- [SockJS](https://github.com/sockjs) Server ( Like WDS 'Webpack Dev Server' and HMR management )
- [WATCHER](https://nodejs.org/docs/latest/api/fs.html#fs_fs_watch_filename_options_listener) node.js for auto reload-files in developement mode .
- [PM2](http://pm2.keymetrics.io/) Production Process Manager for Node.js .
- [Passport](http://passportjs.org/) Simple, unobtrusive authentication for Node.js .
- ~~[Angular](https://github.com/angular/angular-cli) Experimental Bundle Generator ( Angular cli no longer allows the ejection of a webpack config)~~**Nodefony 7 adds the following features** :
- [React](https://github.com/facebookincubator/create-react-app) Experimental Bundle Generator ( Now an React Project can be merge into a Nodefony Bundle )
- [Vue.js](https://vuejs.org) Experimental Bundle Generator ( Now an Vue.js Project can be merge into a Nodefony Bundle )
- [Api swagger-ui](https://swagger.io/) ( Documentation Api with swagger and openapi AOS3)
- [Api graphql](https://graphql.org/) ( Documentation Api with graphiql)Evolution priorities for the next version will focus on robustness, unit testing, documentation and security.
You can follow Nodefony build with github actions at ****
## Nodefony implement modules with CommonJS and ECMAScript 6 ( Class, Inheritance ).
The development framework will not be ported to typescript, but will wait for the version with type syntax in Emacsript**[proposal-type-annotations](https://github.com/tc39/proposal-type-annotations)**
## **Resources for Newcomers**
#### - **[Nodefony Starter Demo](https://nodefony.net)**
#### - **[Nodefony CORE](https://github.com/nodefony/nodefony)**
#### - **[Nodefony Documentation](https://nodefony.net/documentation/nodefony)**
#### Documentation in progress !!
#### On your system _you must have Installed_ :
- **[GIT](http://git-scm.com/)** is Distributed version control system
- **[Node.js](https://nodejs.org/)** ® is a Platform built on Chrome's JavaScript runtime ( >= 8 )
- **[npm](https://www.npmjs.com/)** or **[yarn](https://yarnpkg.com/lang/en/)** or **[pnpm](https://pnpm.io/cli/install)** Packages Manager for javascript application
- **[nvm](https://github.com/nvm-sh/nvm/)** Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
- **[OpenSSL](https://www.openssl.org/)** Toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols
- **[GNU Bash](https://www.gnu.org/software/bash/)** Bash is the GNU Project's shell
#### Operating Systems :
- LINUX
- Debian, Ubuntu (Checked, Tested)
- RASPBIAN Raspberry Pi (Checked)- MACOS (Checked, Tested)
- WINDOWS (Checked)
- FreeBSD (Checked)
- pkg install bash gmake gcc6
- setenv CC "/usr/local/bin/gcc"
- setenv CXX "/usr/local/bin/g++"
- cd /usr/local/bin/ ;ln -s pythonx.x python- ~~OpenBSD (Not Checked yet )~~
- ~~[ELECTRON](https://github.com/nodefony/nodefony-electron) Experimental Nodefony Electron ( Now an Electron Context can be use in Nodefony Project )~~
- EMBEDDED SYSTEM ( Very difficult : large memory footprint )
**[NVM](https://github.com/nvm-sh/nvm#installation-and-update) Installation (Node Version Manager )** :
- [NVM](https://github.com/creationix/nvm) Node Version Manager - Simple bash script to manage multiple active node.js versionsTo install or update nvm, you can use the install script:
```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
# or
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash$ source ~/.bashrc # or source ~/.bash_profile
$ nvm ls-remote # show all remote versions
$ nvm ls # show local versions
```**[Node.js](https://nodejs.org/) Installation with [NVM](https://github.com/creationix/nvm)** :
```sh
nvm install node # "node" is an alias for the latest version
```**[Nodefony](https://nodefony.net) Excutable Installation (Globally)** :
```bash
npm -g install nodefony# or with yarn
yarn global add nodefony
```**Error that you can usually find** :
- EACCES error [See Global install How to Prevent Permissions Errors](https://docs.npmjs.com/getting-started/fixing-npm-permissions) (Reinstall npm with a Node Version Manager)
- Different Node.js version (NODE_MODULE_VERSION XX) use 'nodefony rebuild'**[Node.js](https://nodejs.org/en/) Installation** :
[nvm-windows](https://github.com/coreybutler/nvm-windows#node-version-manager-nvm-for-windows)
to easily switch Node versions between different projects.
or To install or update Node.js, you can download installer here [Node.js](https://nodejs.org/en/)**[Nodefony](https://nodefony.net) Installation** :
Launch a CMD terminal
```bash
npm -g install nodefony# or with yarn
yarn global add nodefony
```
**Add NPM global bin in $Path windows** :On the Windows System Property Menu, configure *Path* environment variable by adding :
```bash
C:\Users\myuser\AppData\Roaming\npm
or
C:\Users\myuser\AppData\Roaming\npm\bin
```**Cli command when use Global installation**
```bash
$ nodefony -v
7.0.0
```**Cli command when By using yarn or npm in trunk**
```bash
#Or by using yarn
yarn run nodefony#Or by using npm
npm run nodefony
```
**By using npx**
***note: npx is included with npm > v5.2 or can be installed separately.***
```bash
npx nodefony -v
7.0.0-beta.10
```**The long way with the full path**
```bash
./node_modules/.bin/nodefony
#Or with the shortcut using npm bin
$(npm bin)/nodefony
```## Build Project with nodefony cli (recommended):
**Cli Usage INTERACTIVE MODE** :
YOU CAN USE CLI INTERACTIVE MODE (nodefony without args) :
```bash
$ nodefony? Nodefony CLI : (Use arrow keys)
❯ Create Nodefony Web Project
Create Micro Service Project
PM2 Tools
--------
Help
Quit
```
**Cli Usage NO INTERRATIVE** :YOU CAN USE CLI NO INTERACTIVE (nodefony with args) :
```bash
# CLI generate project name : myproject$ npx nodefony create myproject
$ cd myproject
```**Cli Help** :
```bash
$ npx nodefony -hnodefony
create [-i] name [path] Create New Nodefony Project
```## Build Project with Github Starter :
**CLI** :
Clone nodefony starter
```bash
$ git clone https://github.com/nodefony/nodefony-starter.git
$ cd nodefony
$ npx nodefony build
...
...
$ npm start
```
**CLI INTERATIVE** :YOU CAN USE CLI INTERACTIVE MODE TO BUILD PROJECT (nodefony without args)
```bash
$ git clone https://github.com/nodefony/nodefony-starter.git
$ cd nodefony
$ ls -l
-rw-r--r-- 1 cci staff 21306 27 mar 19:22 README.md
drwxr-xr-x 12 cci staff 384 27 mar 19:25 app
drwxr-xr-x 3 cci staff 96 27 mar 19:22 bin
drwxr-xr-x 7 cci staff 224 27 mar 19:26 config
drwxr-xr-x 3 cci staff 96 27 mar 19:22 doc
drwxr-xr-x 1342 cci staff 42944 27 mar 19:24 node_modules
-rw-r--r-- 1 cci staff 997 27 mar 19:22 package.json
drwxr-xr-x 3 cci staff 96 27 mar 19:22 src
drwxr-xr-x 4 cci staff 128 29 mar 11:13 tmp
drwxr-xr-x 12 cci staff 384 29 mar 11:01 web
-rw-r--r-- 1 cci staff 542660 27 mar 19:24 yarn.lock$ npx nodefony
? Nodefony CLI : (Use arrow keys)
❯ Build Project
Generater
Tools
PM2 Tools
--------
Help
Quit
```## Serving a Nodefony project via an development server
**Starting Development Servers** :
```bash
$ npx nodefony dev# TO STOP
$
```
**Starting Development Servers in Debug Mode (-d)** :```bash
$ npx nodefony -d dev# TO STOP
$
```OR YOU CAN USE CLI INTERACTIVE MODE (nodefony without args)
```bash
_ _ ___ ____ _____ _____ ___ _ _ __ __
| \ | | / _ \ | _ \ | ____| | ___| / _ \ | \ | | \ \ / /
| \| | | | | | | | | | | _| | |_ | | | | | \| | \ V /
| |\ | | |_| | | |_| | | |___ | _| | |_| | | |\ | | |
|_| \_| \___/ |____/ |_____| |_| \___/ |_| \_| |_|Version : 4.0.0 Platform : linux Process : nodefony PID : 31635
Fri Jul 27 2018 17:01:11 INFO nodefony : WELCOME PROJECT : myproject 1.0.0
? Nodefony CLI :
❯ Start Servers Development
Start Servers Pre-Production
Start Servers Production
Install Project
Rebuild Project
Generater
Tools
PM2 Tools
Run Test
--------
Help
Quit
```**Starting Development Servers in Inspector mode (--inspect)** :
[Nodejs Debugging Guide](https://nodejs.org/en/docs/guides/debugging-getting-started)
```bash
$ npm -g install npx$ npx --node-arg=--inspect nodefony dev
// new version npx > 7
$ npx --node-options=--inspect nodefony dev# check chrome://inspect in your browser
```## Serving a Nodefony Project via a Production server :
**Starting a Nodefony project with [PM2](http://pm2.keymetrics.io/)** :
```bash
$ npx nodefony prod
or
$ npx nodefony start
```
Tools PM2 You can see PM2 config : config/pm2.config.js
```bash
# To See log
$ npx nodefony logs# To List Status of Production projects
$ npx nodefony list# TO KILL PM2 DEAMON
$ npx nodefony kill# TO STOP APPLICATION WITHOUT KILL PM2 DEAMON
$ npx nodefony stop# YOU can use all pm2 command by using
$ yarn pm2 monit
$ yarn pm2 [list|ls|status]
$ yarn pm2 stop all
or
$ npm run pm2 logs --lines 200
```**Checking a Nodefony Project Pre-Production (Usefull to check Clusters Node)** :
```bash
$ npx nodefony preprod
```## Serving a Nodefony project with HTTPS or WSS
By default nodefony listen secure port in 5152 @see config/config.js
During the installation process all the openssl parts were generated ( self-signed localhost certificate ).
You can Change default openssl configuration in :
```bash
ls -l config/openssl├── ca
│ └── openssl.cnf
└── ca_intermediate
└── openssl.cnf
```
You must Add a Trusted CA in your Browser : projectName-root-ca.crt.pem
You can find certificate authority (ca) here:config/certificates/ca/projectName-root-ca.crt.pem
#### Access to Secure App with URL :
#### Access to App with URL :[![nodefony](https://raw.githubusercontent.com/nodefony/nodefony/master/src/nodefony/bundles/monitoring-bundle/Resources/public/images/nodefony.png)](https://nodefony.net)
Open **[config/config.js](https://github.com/nodefony/nodefony/blob/master/config/config.js)** if you want change httpPort, domain ,servers, add bundle, locale ...
```js
/**
* NODEFONY FRAMEWORK
*
* KERNEL CONFIG
*
* Domain listen : Nodefony can listen only one domain ( no vhost )
* Example :
* domain : 0.0.0.0 // for all interfaces
* domain : [::1] // for IPV6 only
* domain : 192.168.1.1 // IPV4
* domain : mydomain.com // DNS
*
* Domain Alias : string only "<>" use domainCheck : true
* Example :
* domainAlias:[
* "^127.0.0.1$",
* "^localhost$",
* ".*\\.nodefony\\.com",
* "^nodefony\\.eu$",
* "^.*\\.nodefony\\.eu$"
* ]
*/
const path = require("path");module.exports = {
system: {
domain: "0.0.0.0",
domainAlias: [
"^127.0.0.1$",
"^localhost$"
],
httpPort: 5151,
httpsPort: 5152,
domainCheck: false,
locale: "en_en",
/**
* BUNDLES CORE
*/
security: true,
realtime: true,
monitoring: true,
mail: true,
documentation: false,
unitTest: true,
redis: false,
mongo: false,
elastic: false,
/**
* SERVERS
*/
servers: {
statics: true,
protocol: "2.0", // 2.0 || 1.1
http: true,
https: true,
ws: true,
wss: true,
certificats: {
key: path.resolve("config", "certificates", "server", "privkey.pem"),
cert: path.resolve("config", "certificates", "server", "fullchain.pem"),
ca: path.resolve("config", "certificates", "ca", "nodefony-root-ca.crt.pem"),
options: {
rejectUnauthorized: true
}
}
},
/**
* DEV SERVER
*/
devServer: {
inline: true,
hot: false,
hotOnly: false,
overlay: true,
logLevel: "info", // none, error, warning or info
progress: false,
protocol: "https",
websocket: true
},
/**
* BUNDLES LOCAL REGISTRATION
* Example :
* bundles: {
* hello-bundle : "file:src/bundles/hello-bundle",
* test-bundle : path.resolve("src","bundles","test-bundle")
* }
*/
bundles: {}
...
```### Install Nodefony :
```
$ npm -g install nodefony
```
[See Global install How to Prevent Permissions Errors](https://docs.npmjs.com/getting-started/fixing-npm-permissions)### Create Project :
```
$ nodefony create myproject
$ cd myproject
```### Generating a New Bundle :
CLI Generate new bundle : default path src/bundles
```bash
$ nodefony generate:bundle name [path]# Or Generate a New Bundle Interactive
$ nodefony? Nodefony CLI : Generater
? Nodefony CLI : (Use arrow keys)
❯ Generate New Bundle
Generate New Controller
Generate New Service
Generate New Entity
Generate New Nodefony Project
Generate Openssl Certificates
Generate Haproxy Configuration
Generate Nginx Configuration
Generate letsEncrypt Webroot Configuration
--------
Quit
```### Starting Servers to check new Bundle hello:
```bash
$ npm start
or
$ nodefony dev
```
Access to bundle route with URL :Access to bundle route with URL :
#### Now hello-bundle is auto-insert in framework with watcher active and auto-config Webpack Module bundler
### Example controller : src/bundles/hello-bundle/controller/defaultController.js
```js
/**
* @class defaultController
* @constructor
* @param {class} container
* @param {class} context
* @Route ("/hello")
*/
class defaultController extends nodefony.Controller {constructor(container, context) {
super(container, context);
// start session
this.startSession();
}/**
* @Route ("",
* name="hello-route")
*/
indexAction() {
return this.render("hello-bundle::index.html.twig", {
name: this.bundle.name,
description: this.bundle.package.description
});
}
}module.exports = defaultController;
```### Example view (twig) : src/bundles/hello-bundle/Resources/views/index.html.twig
```twig
{% extends './base.html.twig' %}
{% set error = getFlashBag("error") %}
{% set info = getFlashBag("info") %}
{% block body %}
{{ name }}
{{ description }}
{% endblock %}```
### watchers :
#### The bundle generation engine build bundle config with node.js watcher configuration
#### In developement mode is very usefull to auto-reload files as controllers , views , routing , translations
#### without having to reboot the server.
You can see hello-bundle config : src/bundles/hello-bundle/Resources/config/config.js
```js
module.exports = {
locale : "en_en",
/**
* WATCHERS
*
* watchers Listen to changes, deletion, renaming of files and directories
* of different components
*
* For watch all components
* watch: true
* or
* watch:{
* controller: true,
* config: true, // only routing and services
* views: true,
* translations: true,
* webpack: true
* }
*
*/
watch: true,/**
* DEV SERVER
*/
devServer: {
hot: false
}
};
```### Webpack Module bundler :
#### The bundle generation engine build bundle config with a predefined webpack configuration
#### In this way webpack is very usefull to manage all assets of bundle
#### In developement mode watch is very usefull to auto-compile webpack module bundle
#### without having to reboot the server
You can see hello-bundle config webpack : src/bundles/hello-bundle/Resources/config/webpack.config.js
```js
// Default context
//const context = path.resolve(__dirname, "..", "public");
const public = path.resolve(__dirname, "..", "public", "assets");
const publicPath = "/hello-bundle/assets/";
let wpconfig = null;
let dev = true;
if (kernel.environment === "dev") {
wpconfig = require("./webpack/webpack.dev.config.js");
} else {
wpconfig = require("./webpack/webpack.prod.config.js");
dev = false;
}module.exports = webpackMerge(config, {
//context: context,
target: "web",
entry: {
hello:["./Resources/js/hello.js"]
},
output: {
path: public,
publicPath: publicPath,
filename: "./js/[name].js",
library: "[name]",
libraryExport: "default"
},
externals: {...},
resolve: {...},
module: {...},
plugins: [...],
devServer: {
inline: true,
hot: false
}
});
```Access to monitoring route with URL :
[![MONITORING](https://raw.githubusercontent.com/nodefony/nodefony/master/src/nodefony/bundles/monitoring-bundle/Resources/public/images/monitor.png)](https://nodefony.net/nodefony)
Monitoring in progress !!!
## Who Use Nodefony:
     
     
     
## Big thanks:
- [D-Lake](https://www.d-lake.fr/) French specialist in infrastructure and data security.
- [Emersya](https://emersya.com) Emersya has pioneered a unique way of interacting with products online using 3D technology.
## Related Links:- [Node.js](https://nodejs.org/)
- [npm](https://www.npmjs.com/)
- [Framework Symfony](http://symfony.com/)
- [Twig.js](https://github.com/justjohn/twig.js/wiki)
- [PM2](https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md)
- [WEBPACK](https://webpack.js.org/)More informations **[Nodefony Documentation](https://nodefony.net/documentation)**
- Christophe CAMENSULI [github/ccamensuli](https://github.com/ccamensuli)
[CeCILL-B](https://github.com/nodefony/nodefony/blob/master/LICENSE)
[Demo](https://nodefony.net)