All Projects → JonnyBGod → angular2-webpack-advance-starter

JonnyBGod / angular2-webpack-advance-starter

Licence: MIT license
An advanced Angular2 Webpack Starter project with support for ngrx/store, ngrx/effects, ng2-translate, angulartics2, lodash, NativeScript (*native* mobile), Electron (Mac, Windows and Linux desktop) and more.

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language
HTML
75241 projects
CSS
56736 projects

Projects that are alternatives of or similar to angular2-webpack-advance-starter

Angular Seed Advanced
Advanced Angular seed project with support for ngrx/store, ngrx/effects, ngx-translate, angulartics2, lodash, NativeScript (*native* mobile), Electron (Mac, Windows and Linux desktop) and more.
Stars: ✭ 2,279 (+4551.02%)
Mutual labels:  ngrx, seed, nativescript, angulartics2
ng-seed
Simple Angular seed project with commonly used features.
Stars: ✭ 12 (-75.51%)
Mutual labels:  angular2, seed, starter
Universal
Seed project for Angular Universal apps featuring Server-Side Rendering (SSR), Webpack, CLI scaffolding, dev/prod modes, AoT compilation, HMR, SCSS compilation, lazy loading, config, cache, i18n, SEO, and TSLint/codelyzer
Stars: ✭ 669 (+1265.31%)
Mutual labels:  ngrx, seed, starter
angular-gulp-starter
Simple dev/prod build for Angular (2+) using gulp, systemjs, rollup, ngc (AOT), scss, Visual Studio
Stars: ✭ 18 (-63.27%)
Mutual labels:  angular2, seed, starter
nativescript-task-app
An example task management NativeScript Angular app. Demonstrates ngrx effects, lazy-loading modules, offline storage and app branding.
Stars: ✭ 26 (-46.94%)
Mutual labels:  ngrx, nativescript
fullstack-graphql-angular
Simple Fullstack GraphQL Application with Angular CLI + Redux. API built with Typescript + Express + GraphQL + Sequelize (supports MySQL, Postgres, Sqlite and MSSQL). WebApp built with Angular CLI + Redux + Async Middleware to access the API.
Stars: ✭ 67 (+36.73%)
Mutual labels:  ngrx, angular2
ngx-redux-ui-management-recipes
Recipes for managing the UI layout of an application using Redux in Angular
Stars: ✭ 39 (-20.41%)
Mutual labels:  ngrx, angular2
Angular Webpack Starter
A complete Angular 6 and Webpack 4 starter seed with minimal and full featured branches. Full featured branch includes: Material Design 2 (Bootstrap 4 branch available as well), @ngrx, HMR, DLLs and optional use of Universal for server-side rendering - Supports AOT (offline) compilation, sync and lazy loading. Karma/Protractor for e2e/unit tests.
Stars: ✭ 911 (+1759.18%)
Mutual labels:  ngrx, starter
Angular Redux Ngrx Examples
Sample projects with Angular (4.x) + Angular CLI + ngrx (Redux) + Firebase
Stars: ✭ 73 (+48.98%)
Mutual labels:  ngrx, angular2
Aspnetcore Angular Universal
ASP.NET Core & Angular Universal advanced starter - PWA w/ server-side rendering for SEO, Bootstrap, i18n internationalization, TypeScript, unit testing, WebAPI REST setup, SignalR, Swagger docs, and more! By @TrilonIO
Stars: ✭ 1,455 (+2869.39%)
Mutual labels:  ngrx, angular2
angular5-starter
⭐ An Angular5 Starter Kit :: Router, HttpClient, Forms, Services, Dev/Prod, HMR, Async/Lazy Routes and a very good structure for large applications by @naologic
Stars: ✭ 54 (+10.2%)
Mutual labels:  seed, starter
angular2-instagram
🔥Instagram like photo filter playground built with Angular2 (Web | Desktop)
Stars: ✭ 91 (+85.71%)
Mutual labels:  ngrx, angular2
ng-math
Math Flashcard Progressive Web App built with Angular 2
Stars: ✭ 17 (-65.31%)
Mutual labels:  ngrx, angular2
ngrx-form
Reactive Forms bindings for NGRX and Angular
Stars: ✭ 46 (-6.12%)
Mutual labels:  ngrx, angular2
material2-admin
Angular - Material2 - Redux - Flex - Admin Example - Starter
Stars: ✭ 13 (-73.47%)
Mutual labels:  ngrx, starter
nativescript-ng2-drawer-seed
Nativescript template project with drawer support
Stars: ✭ 17 (-65.31%)
Mutual labels:  angular2, nativescript
ionic2.0-angularfire
this a basic application for Ionic 2.0.rc5 with AngularFire2 with ngrx/store & ngrx/effects to manage state
Stars: ✭ 71 (+44.9%)
Mutual labels:  ngrx, angular2
nativescript-ng-shadow
Angular directive to apply shadows to native elements according to the elevation level guidelines of material design specification
Stars: ✭ 54 (+10.2%)
Mutual labels:  angular2, nativescript
spring-kotlin-angular4
Another abadoned Spring Boot application with Angular and Kotlinabandoned
Stars: ✭ 22 (-55.1%)
Mutual labels:  ngrx, seed
angular-cli-skeleton
angular-cli skeleton to quickly start a new project with advanced features and best practices. All features are described in README.md.
Stars: ✭ 32 (-34.69%)
Mutual labels:  ngrx, starter

Webpack and Angular 2

+

Angular 2 Webpack Advance Starter Integrations


Angular 2 Style Guide Build Status MIT license Dependency Status devDependency Status Gitter Chat

This is an advance starter project for Angular 2 apps based on AngularClass's angular2-webpack-starter and Nathan Walker's angular2-seed-advanced.

I would like to thank both for their great work and collaboration. Please refer to both projects' pages for extra documentation.

Integration with:

Multiple Platforms
The zen of multiple platforms. Chrome, Android and iPhone all running the same code.
Desktop
Programming Nirvana. Mac and Windows desktop both running the same code.

Table of Contents

Enhanced development workflow

  • Decorators for components which reduce boilerplate for common component setups
  • Shared code can be found in frameworks:
    • app: your shared application architecture code
    • core: foundation layer (decorators and low-level services)
    • analytics: analytics provided by Google Analytics
      • Only reports data in production build
    • i18n: internationalization features
    • electron: Electron specific code
    • sample: Just a sample module providing some components and services
    • test: test specific code providing conveniences to make testing your code easier and faster

Enhanced testing support options

  • mocks for various services
  • configurable provider blocks for easy test setup of common application providers
    • tired of setting up similar providers over and over again for different tests?
    • configure a reusable test provider which can be configured on a case-by-base basis
    • see example here
  • helpers for end-to-end (e2e, integration) tests
  • convenient shorthand to reduce test setup boilerplate and enhance speed of writing tests
    • are your test cases buried by multiple import lines requiring you to scroll just to get to the substance of the test?
    • removes noise allowing you to better focus on the substance of the test
    • provides full intellisense support
    • allows your team to add unique shorthands for various testing scenarios specific to your application needs
    • plays nice with tslint options like "no-unused-variable": true as the api hangs off a plain Object instead of globals
      • what's the value of that you ask? have you ever isolated a test with iit or ddescribe but didn't import those or vice versa, used iit leaving an unused it now in your tests? yeah, tslint will be all over you :/
      • avoids unused variable warnings altogether in tests since you are always using a valid key from the shorthand Object
    • see example here

Advice: If your project is intended to target a single platform (i.e, web only), then angular2-webpack-starter is likely more than suitable for your needs. However if your project goals are to target multiple platforms (web, native mobile and native desktop), with powerful out of the box library support and highly configurable/flexible testing options, then you might want to keep reading.

Additionally, this seed is intended to push a couple boundaries so if you see dependencies that are bleeding edge, this is intentional.

Getting Started

Dependencies

  • node v5.x.x or higher and npm 3 or higher.

  • To run the NativeScript app:

npm install -g nativescript

Usage

git clone --depth 1 https://github.com/JonnyBGod/angular2-webpack-advance-starter.git
cd angular2-seed-advanced

# install the project's dependencies
npm install or yarn install

# start the server
npm start

# use Hot Module Replacement
npm run start:hmr

Other commands

build files

# development
npm run build:dev
# production (jit)
npm run build:prod
# AoT
npm run build:aot

hot module replacement

npm run server:dev:hmr

watch and build files

npm run watch

run unit tests

npm run test

watch and run our tests

npm run watch:test

run end-to-end tests

# this will start a test server and launch Protractor
npm run e2e

continuous integration (run unit tests and e2e tests together)

# this will test both your JIT and AoT builds
npm run ci

run webdriver (for end-to-end)

npm run webdriver:update
npm run webdriver:start

run Protractor's elementExplorer (for end-to-end)

npm run webdriver:start
# in another terminal
npm run e2e:live

generate docs

npm run docs

build Docker

npm run build:docker

Electron App

Develop

Mac:      npm run start:desktop
Windows:  npm run start:desktop:windows

Build: Electron App for Mac, Windows or Linux for distribution

Mac:      npm run build:desktop:mac
Windows:  npm run build:desktop:windows
Linux:    npm run build:desktop:linux

All:      npm run build:desktop

Framework How-Tos

i18n

  • how to add a language?
    • src/assets/i18n/
      • add [language code].json (copy existing one and adapt the translation strings)
    • src/client/app.config.json
      • add language to availableLanguages
    • src/app/frameworks/i18n/components/lang-switcher.component.spec.ts
      • fix test

Change Detection OnPush Note

Please Note: The seed uses Angular's ChangeDetectionStrategy.OnPush by default which requires some understanding of immutability and one-way data flows. Please check out the following resources to learn more:

If you experience issues with changes not occuring in your views, you can disable this by commenting out these lines. The seed uses OnPush by default because it provides optimal performance and if you decide to turn it off while developing your application, you can always turn it back on when you're ready to refactor your data services to utilize OnPush properly.

General Best Practice Guide to Sharing Code

There’s actually only a few things to keep in mind when sharing code between web/mobile. The seed does take care of quite a few of those things but here’s a brief list:

  • Don’t import {N} modules into your components/services. {N} modules can only be used inside the {N} app therefore cannot be shared. To get around this, use OpaqueTokens which is a fancy name for something quite simple. Learn more here. A great example of how to integrate 2 different plugins (1 for web, 1 for {N}) and share all the code exists in this wiki article: How to integrate Firebase across all platforms written by the awesome Scott Lowe.
  • Use the conditional hooks provided by the seed in shared methods where you may need to handle something differently in {N} than you do on the web. For example, see here.
  • Don’t use window global. Inject the WindowService provided by the seed instead. This includes usage of alert, confirm, etc. For example:

If you were thinking about doing: alert('Something happened!');, Don't. Instead inject WindowService:

constructor(private win: WindowService) {}

public userAction() {
  if (success) {
    // do stuff
  } else {
    this.win.alert('Something happened!');
  }
}

This ensures that when the same code is run in the {N} app, the native dialogs module will be used.

The advice Nathan Walker's likes to give, and I fully support it, is:

Code with web mentality first. Then provide the native capability using Angular’s {provide: SomeWebService, useClass: SomeNativeService } during bootstrap.

There are some cases where you may want to use useValue vs. useClass, and other times may need to use useFactory. Read the Angular docs here to learn more about which you may need for your use case.

How best to use for your project

Setup

NOTE: This should be done first before you start making any changes and building out your project. Not doing so will likely result in dificulty when trying to merge in upstream changes later.

  1. Download a zip of the seed. (Do not fork)
  2. npm run git.setup - This will initialize git as well as setup upstream properly.
  3. git remote add origin ...your private repo...
  4. npm run git.prepare - This will prepare git to handle the merge
  5. npm run git.merge - This will fetch upstream and run the first merge (*Important)
  • IMPORTANT: You will see a wall of Conflicts after doing above (a Conflict for every single file). This is normal. There actually will not be any problematic conflicts as it's just reporting every single file which both sides (upstream and your first commit) added.
  1. git add .; git commit -m'ready'. Yes, you will be committing all those conflicts, which actually are not a problem in this 1 time case.
  2. Now you have git setup and ready to develop your application as well as merge in upstream changes in the future.
  3. npm install (and all other usage docs in this README apply)
  4. Create a new framework for your application in src/app/frameworks to build your codebase out. Say your app is called AwesomeApp, then create awesomeapp and start building out all your components and services in there. Create other frameworks as you see fit to organize.
  5. If you don't want an integration that comes out of box with this seed; for example. let's say you don't want to use i18n. Then just delete the i18n, remove ng2-translate as dependency root package.json and nativescript/package.json. Then remove any references to i18n throughout.

Merging latest upstream changes

  1. npm run git:merge:preview - This will fetch upstream and show you how the merge would look
  2. npm run git:merge - This will actually do the merge
  3. Handle any conflicts to get latest upstream into your application.
  4. Continue building your app.

You can read more about syncing a fork here.

If you have any suggestions to this workflow, please post here.

Configuration

Configuration files live in config/ we are currently using webpack, karma, and protractor for different stages of your application.

Use config/custom/ configuration files when possible to add your custom configurations or override our configurations. This will help you when updating upstream.

AoT Don'ts

The following are some things that will make AoT compile fail.

  • Don’t use require statements for your templates or styles, use styleUrls and templateUrls, the angular2-template-loader plugin will change it to require at build time.
  • Don’t use default exports.
  • Don’t use form.controls.controlName, use form.get(‘controlName’)
  • Don’t use control.errors?.someError, use control.hasError(‘someError’)
  • Don’t use functions in your providers, routes or declarations, export a function and then reference that function name
  • Inputs, Outputs, View or Content Child(ren), Hostbindings, and any field you use from the template or annotate for Angular should be public

More Documentation

angular2-webpack-starter

angular2-seed-advanced

Contributing

Please see the CONTRIBUTING and CODE_OF_CONDUCT files for guidelines.


License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].