knockout-esnext
knockout-esnext copied to clipboard
A complete overhaul of the Knockout.js library code and build process. Intended for ES6+ browsers only.
Knockout-ESNext 
A complete overhaul of the Knockout.js library and build process.
Making Knockout.js slicker, faster, more maintainable than ever.
Version scheme is v3.5.1xxx, where 3.5.1 is the initial Knockout version this library was forked off,
and xxx the modifications since then.
Changes (in code):
- Rewrote all library code in ES6+ supported in all modern browsers
- Use native means for iterations, mappings etc. instead of former helper functions (like ko.utils.arrayForEach)
- Reduced indirections by inlining function bodies via Rollup inline-macros plugin
- Turned former source fragments into ES modules
- Retained most of the original names & structure, so catchup & diffing with original Knockout.js remains possible
- Easy circular-dependency detection through ESM imports/exports
- No more worries about loading order of fragments, no more file concatenation at all
- Internals are now self-contained & namespace-agnostic
- no more
ko.foo.barreferences or assignments internally ko.jsbeing the only source of truth about what is exposed publicly (including legacy aliases)- override-points like
ko.onErrorare setters inko.js, so we gain full control over what can be overridden
- no more
- Removed historic browser support (IE, earliest Firefox etc)
- Removed jQuery support
- Kept all ~1300 tests working with very few changes:
- Added tests for type checking (
ko.isObservableetc) inbasicTypeCheckBehaviors.js - Removed IE/jQuery-related tests
- Added tests for type checking (
Changes (in behavior)
- When using
extend({notify: 'always'})with observables/computeds, their current default OR customequalityCompareris now memorized and can be restored by using the extender again with anything other than'always'. Original Knockout would only reassign its default equality comparer (valuesArePrimitiveAndEqual).
Changes (build process):
- Removed Google Closure Compiler and all code soothing its side-effects (
ko.exportSymbol) - Using Rollup + Terser plugin for build & minification
- Wrote Rollup plugin
rollup-plugin-inline-macros.js, allowing to "inline" frequently used helper functions & avoid function calls in hot code paths - Now exporting the Knockout.js library in 3 flavors:
- Minified UMD (
knockout.js) - Minified ES Module (
knockout.esm.js) - Non-minified UMD debug version incl. sourcemap (
knockout.debug.js&knockout.debug.js.map, not part of theknockout-esnextNPM package)
- Minified UMD (
- Removed deprecated
PhantomJS - Removed
Grunt - Added
ESLintfor code quality checks
Changes (testing/debugging)
- After changing any source file during browser testing (
spec/runner.html), you now have to run thebuildtask before the next test-run:-
npm run build
build/knockout.debug.jsused byrunner.html. -
- The debug version now has a sourcemap generated alongside it (
knockout.debug.js.map), so you can attach your IDE's debugger to e.g.runner.htmland add breakpoints inside the actual source files rather than the generatedknockout.debug.js.
Knockout
Knockout is a JavaScript MVVM (a modern variant of MVC) library that makes it easier to create rich, desktop-like user interfaces with JavaScript and HTML. It uses observers to make your UI automatically stay in sync with an underlying data model, along with a powerful and extensible set of declarative bindings to enable productive development.
Getting started
Totally new to Knockout? The most fun place to start is the online interactive tutorials.
For more details, see
- Documentation on the project's website
- Online examples at http://knockoutjs.com/examples/
Downloading Knockout-ESNext
You can download released versions of Knockout-ESNext from Github, or the original Knockout from the project's website.
For Node.js developers, Knockout-ESNext is also available from npm - just run npm install knockout-esnext.
Building Knockout-ESNext from sources
If you prefer to build the library yourself:
-
Clone the repo from GitHub
git clone https://github.com/justlep/knockout-esnext.git cd knockout-esnext -
Acquire build dependencies.
Make sure you have Node.js installed on your workstation. This is only needed to build Knockout from sources. Knockout itself has no dependency on Node.js once it is built (it works with any server technology or none). Now run:
npm install -
Start the build
npm run buildNow you'll find the built files in
build/.
Running the tests
If you want to run the specs in Node.js
npm test
Or, if you want to run the specs in a browser (e.g., for debugging), simply open spec/runner.html in your browser.
License
MIT license - http://www.opensource.org/licenses/mit-license.php