Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Distributing UI Libraries: in a post Web-Component world

Distributing UI Libraries: in a post Web-Component world

Modern UI Component libraries influenced by Web Components will rely more heavily on package management than last generation UI Frameworks. In this 15 minute session we'll introduce package management for web graphical user interfaces, talk about the best package contents for a UI component, and some tactics for making smooth releases.

Talk presented at OpenTable Tech meetup in February 2016.

Rachael L Moore

February 02, 2016
Tweet

More Decks by Rachael L Moore

Other Decks in Technology

Transcript

  1. Distributing UI Libraries in a post-Web-Component world Rachael L Moore

    Sr UI Engineer OpenTable morewry OpenTable Tech Talks Current Web Development at OpenTable Tues Feb 2, 2016
  2. > pkgmgr install a-gui pkgmgr not-cached //ot/a-gui#^0.2.0 pkgmgr resolve //ot/a-gui#^0.2.0

    pkgmgr install a-gui#0.2.1 > pkgmgr install a-gui Package Manager Example
  3. > pkgmgr install a-gui pkgmgr not-cached //ot/a-gui#^0.2.0 pkgmgr resolve //ot/a-gui#^0.2.0

    pkgmgr install a-gui#0.2.1 pkgmgr not-cached //ot/b-gui#^0.3.0 pkgmgr fetch //ot/b-gui#^0.3.0 pkgmgr resolve //ot/b-gui#^0.3.0 pkgmgr install b-gui#0.3.12 > pkgmgr install a-gui Package Manager Example
  4. Patch Release Interoperable fixes Bug fixes Minor cleanup Some refactors

    <a-gui color="blue"> </a-gui> User's Code git commit -m "(fix) color not blue in IE10"
  5. Minor releases Backward compatible New optional functionality No user changes

    required <a-gui color="blue"> </a-gui> <a-gui color="blue" size="large"> </a-gui> User's Code git commit -m "(feat) add size option"
  6. <a-gui color="blue"> </a-gui> <a-gui bg-color="blue"> </a-gui> Major releases Breaking changes

    Complete rewrite with new public API Manual changes required by user User's Code git commit -m "(api) color -> bg-color"
  7. Version Locking "Broken" is not only APIs Bugs may exist

    in functionality Glitches when used together
  8. > npm install # get latest # create lock file

    Example Lock File Example Lock File
  9. > npm install # get latest # create lock file

    Example Lock File {   "name": "A",   "version": "1.1.0",   "dependencies": {     "B": {       "version": "1.0.1",       "from": "B@^1.0.0",       "resolved": "B1.0.1"     },     "C": {       "version": "2.5.3",       "from": "C@^2.4.0",       "resolved": "c2.5.3"     ... Example Lock File Source
  10. > npm install # get latest # create lock file

    > npm install # skip latest # refer to lock file > npm install # get latest # create lock file Example Lock File {   "name": "A",   "version": "1.1.0",   "dependencies": {     "B": {       "version": "1.0.1",       "from": "B@^1.0.0",       "resolved": "B1.0.1"     },     "C": {       "version": "2.5.3",       "from": "C@^2.4.0",       "resolved": "c2.5.3"     ... Example Lock File Source
  11. > npm install # get latest # create lock file

    > npm install # skip latest # refer to lock file > npm install # get latest # create lock file Example Lock File Example Lock File
  12. > npm install # get latest # create lock file

    > npm install # skip latest # refer to lock file > npm install # get latest > npm install # get latest # create lock file > npm install # skip latest # refer to lock file > npm install # get latest # create lock file Example Lock File Example Lock File
  13. require(["lodash1"], function(lodash) { // code } ); require(["lodash2"], function(lodash) {

    // code } ); <html> <body> <a-gui> </a-gui> </body> </html> HTML - global scoped - JavaScript
  14. > git config --global url."https://github".insteadOf git://github [url "https://github"] insteadOf =

    git://github > touch ~/.netrc && vim ~/.netrc machine github.com login ? password ? > git config --global url."https://github".insteadOf git://github [url "https://github"] insteadOf = git://github git config / token in .netrc Source
  15. { "registry" : "http://bower.ot.com" } { "registry" : "http://artifactory.ot.com", "resolvers":

    [ "bower-art-resolver" ] } Private Bower - Hacklone Private Bower - Artifactory
  16. { "name": "a-gui", "dependencies": { "b-gui": "^0.2.0" } } { "name": "b-gui", "dependencies": { "c-gui": "^0.2.0"

    } } /* a-gui dist concats: a-gui b-gui c-gui */ <a-gui> & <b-gui> - bower.json built JS - <a-gui>
  17. { "name": "risky", "version": "0.0.0", "dependencies": { "my-comp": "^5.0.0", "also-this": "^0.3.0" } } { "name": "safe",

    "version": "0.0.0", "dependencies": { "my-comp": "^4.0.0", "also-this": "^0.2.0" } } safe-bundle.js - default versions behind toggle - risky-bundle.js
  18. Best Practices Make independent components Choose a package manager Follow

    a versioning scheme Avoid disrupting existing uses Choose a package format Set up a private registry Set up a private file repository Offer optional tasks or recipes Use feature branches Make pre-releases Document!
  19. OpenTable is hiring! We’re hiring! Visit our careers page at

    opentable.com/careers/ We’re hiring! Visit our careers page at opentable.com/careers/