Echoes Player - Angular2 Version
Echoes is a great youtube player developed by Oren Farhi. It's fun & easy to listen or watch videos from youtube with Echoes. What if youtube was designed to be used as music player? This repository is an implementation of Echoes Player with angular 2 - It's still a work in progress aimed at learning angular 2.
Echoes Player is also available as a Chrome Application
It can be regarded as the Media Player experience for youtube listening pleasure.
Angular 2 Consulting Services
I'm a Senior Javascript Engineer & A Front End Consultant. My services include:
- consulting to companies and startups on how to approach code in their projects and keep it maintainable.
- I provide project bootstrapping and development - while afterwards, I integrate it on site and guide the team on it.
Tech Stack
Included ngrx solutions:
- ngrx/store - State Management a la "Redux" based on RxJs
- ngrx/effects - Side Effects layer for ngrx/store
ngrx/notify(disabled until upgrade) - reactive web notifications- ngrx-store-localstorage - local sotrage support for ngrx/store
- ngrx/store-devtools - a connector to redux devtool for chrome
Included Technologies & Libraries
- Angular JS v2.x
- Bootstrap v3.x (LESS)
- Typescript 2
- ES6 / ES2015 (using Loader Spec)
- Webpack 2
What's Inside
This is a clone and modification of AngularClass angular2 webpack starter.
It's a quite robust starter which includes inside everything needed to experiment with angular2, prepare for production and testing as well.
Quick start
Make sure you have Node version >= 5.0 and NPM >= 3
# install the repo with npm
npm install
# start the server
npm start
# use Hot Module Replacement (disabled for now)
# npm run server:dev:hmr
go to http://0.0.0.0:3000 or http://localhost:3000 in your browser
Table of Contents
File Structure (adopted from angularclass)
I use the component approach in our starter. This is the new standard for developing Angular apps and a great way to ensure maintainable code by encapsulation of our behavior logic. A component is basically a self contained app usually in a single file or a folder with each concern as a file: style, template, specs, e2e, and component class. Here's how it looks:
angular2-webpack-starter/
├──config/ * our configuration
| ├──helpers.js * helper functions for our configuration files
| ├──spec-bundle.js * ignore this magic that sets up our angular 2 testing environment
| ├──karma.conf.js * karma config for our unit tests
| ├──protractor.conf.js * protractor config for our end-to-end tests
│ ├──webpack.dev.js * our development webpack config
│ ├──webpack.prod.js * our production webpack config
│ └──webpack.test.js * our testing webpack config
│
├──src/ * our source files that will be compiled to javascript
| ├──main.browser.ts * our entry file for our browser environment
│ │
| ├──index.html * Index.html: where we generate our index page
│ │
| ├──polyfills.ts * our polyfills file
│ │
| ├──vendor.ts * our vendor file
│ │
│ ├──app/ * WebApp: folder
│ │ ├──app.spec.ts * a simple test of components in app.ts
│ │ ├──app.e2e.ts * a simple end-to-end test for /
│ │ └──app.ts * App.ts: a simple version of our App component components
│ │
│ └──assets/ * static assets are served here
│ ├──icon/ * our list of icons from www.favicon-generator.org
│ ├──service-worker.js * ignore this. Web App service worker that's not complete yet
│ ├──robots.txt * for search engines to crawl your website
│ └──humans.txt * for humans to know who the developers are
│
│
├──tslint.json * typescript lint config
├──typedoc.json * typescript documentation generator
├──tsconfig.json * config that webpack uses for typescript
├──package.json * what npm uses to manage it's dependencies
└──webpack.config.js * webpack main configuration file
Development Guide
build files
# development
npm run build:dev
# production
npm run build:prod
hot module replacement (disabled)
npm run server:dev:hmr
watch and build files
npm run watch
run tests
npm run test
run end-to-end tests
# make sure you have your server running in another terminal
npm run e2e
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
Configuration
Configuration files live in config/
we are currently using webpack, karma, and protractor for different stages of your application
Visual Studio Code + Debugger for Chrome
Install Debugger for Chrome and see docs for instructions to launch Chrome
The included .vscode
automatically connects to the webpack development server on port 3000
.
Types
When you include a module that doesn't include Type Definitions inside of the module you can include external Type Definitions with @types
i.e, to have youtube api support, run this command in terminal:
npm i @types/youtube @types/gapi @types/gapi.youtube
In some cases where your code editor doesn't support Typescript 2 yet or these types weren't listed in tsconfig.json
, add these to "src/custom-typings.d.ts" to make peace with the compile check:
import '@types/gapi.youtube';
import '@types/gapi';
import '@types/youtube';
Custom Type Definitions
When including 3rd party modules you also need to include the type definition for the module if they don't provide one within the module. You can try to install it with @types
npm install @types/node
npm install @types/lodash
If you can't find the type definition in the registry we can make an ambient definition in this file for now. For example
declare module "my-module" {
export function doesSomething(value: string): string;
}
If you're prototyping and you will fix the types later you can also declare it as type any
declare var assert: any;
declare var _: any;
declare var $: any;
If you're importing a module that uses Node.js modules which are CommonJS you need to import as
import * as _ from 'lodash';