Includes non-js options like .Net and PHP
Categories: Flavors (ES6), Front-end (React), State Management (REST API, Redux), Back-end (Express), Testing (Mocha), CSS (SASS/SCSS), Build Tools (NPM), Mobile (Native, Electron)
1. Don’t overdo new stuff. Could kill the project.
2. Depending on amount of existing libraries, may make sense to keep with existing. Is there value in replacing? Will it fit into the schedule?
3. Vanilla JS vs Elm/TS/CoffeeScript. CSS vs SASS. Standard vs custom modules
4. Small utility or MV* framework? MomentJS vs Angular
5. Think Kendo UI, Jquery UI, Office UI Fabric
6. Free vs Paid. Blog vs video vs conference. Do authors provide support (free or paid)?
7. Is it maintained? What’s the update cycle? Are bugs fixed in a timely fashion?
J/CSOM: Since 2010, API for accessing SP assets/objects
SPFx: New Toy! Framework for building webparts and extensions (UI customizations: notifications, toolbars, and list views)
SPServices: wrapper for old XML web services, built on Jquery, added functionality (i.e. cascading dropdowns)
Graph API: REST APIs for Office 365 (AAD, SPO, 1Drive, Teams, Planner, ID Mngr, Intune, etc)
OUIF: official UI of O365, Icons, Typography, Brand icons, buttons, additional components (i.e. Combo box, Date Picker)
P&P: Wrapper for REST API, JSOM-like, components (i.e. Taxonomy picker, People Picker)
EE: Elm, Flow, ClojureScript, Reason
Arrow: Think Lambdas. Anonymous function means this maintains calling scope
Modules: members are private by default. Solves dependency chains. With bundlers, limits number of script tags needed
Temp Lit: C# String Interpolation. No more string concat’ing.
Classes: Not like C# classes. Cleaner implementation for prototypes. No properties, just methods.
Promises: synchronous programming in an async world. Just say no to race conditions. Differences between Promise and JQ Deferred. JQ-D doesn’t capture errors.
No brackets, semicolons
Nesting chains commands
Still need parens for function calls
Splats: Catches parameters as an array of objects
Great for those of us who avoided JS
Very C#-y
Classes allow properties
Other notables: Aurelia, Ember, Backbone, Polymer
It does everything! MV* Framework
V2 minified about 570K
AngularJS == 1.x == pure JS
Angular == 2+ == TS
Routing: Navigation within the app w/o reloads (SPA)
DI: Class receives dependencies externally rather than creating them
Directives: custom DOM object: element/Component, attribute
Services: Data managers. Calls the REST API or data source.
132K
vDOM: Same props as real DOM, but can’t change screen. JSX render every vDOM object is updated. React then compares vDOM before/after update (diffing), then updates diffs in real DOM only
1Way: Use this.props to store variables rendered by child components.
JSX: Preprocessor, JS XML, Allows directive-like functionality (i.e. ChildComponent)
63K
Angular == handlebars {{ varName }}
KO == v-for, v-if
.Vue files store HTML, JS, and CSS – Can pseudo-split using <script src=“x.css”> and require(“ViewModelClass”)
Vars are observables by default
Style scoped = scopes CSS to only this component
LESS, Stylus
Animations: Auto-start, loopable
Transitions: Triggered on CSS prop change (:hover), explicit monitoring of changes
Calc: Cross measurement calculations, use case: content div has prev sibling header. Content div needs to scroll on small height. Parent element doesn’t have height set (else overflow-y works)
Media: responsive design glue, types (all, print, screen, speech)
- only: older browsers won’t render, requires media type
- not: inverse of query, requires media type
- and: both conditions must be true
- or ( , ): comma instead of word
Webfonts: link to font, formats: TrueType (TTF), OpenType (OTF), Web Open Font Format (WOFF/WOFF 2.0), SVG Fonts/Shapes, Embedded OpenType (EOT)
Extends CSS with code-like features
Mixins: Group CSS declarations for reuse
Content: Allows extending a mixin…Sort of inheritance-like
Vars: One value to rule them all…or reuse, at least
Nesting: Clearer scoping
Design/Styling framework built on HTML and CSS
Grid: 12 column grid using classes: container, row, col-<size>
Components: glyphicon, navbar, alerts, etc
JS Plugins: Jquery based, modals, carousel, tabs, collapse
Templates: free and paid options
Free up time for devs to spend time decluttering inbox and avoiding extra meetings
Scaffolding: creates files w/ boilerplate code
B&P: optimizations, deployment
PM: import libraries
Generators scaffold whole projects to useful parts
Yeoman: King of the hill, many generators
Slush: new, gulp based, few generators
CLIs: Angular/Vue/React, geared to specific library only, conventions/features are baked in
Initial use: Combine and minify
Loaders: Transpile (TS > JS, images > data URLs), import files directly from modules,
Plugins: Minify, copy files to another/build directory, compress assets, etc.
NPM – King of JS packages, shrinkwrap for exact version tracking, needs to be called for updates
Yarn – built on NPM, yarn.lock file w/ exact installed package versions, keeps lock file updated (NPM doesn’t), faster than npm
Bower – 16K+ client-side packages registered, being maintained but suggested to move to Yarn and Webpack
Nuget – Does have client-side packages, but primarily .Net/server-side
SPFx – npm, gulp, mocha, React/KO/none, TypeScript
- Vue is easy enough, Angular 2+ sort-of, Sahil Malik has a PoC demo