distributing 

modules with 

npm & bower

Modularity

Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality

noun

the use of individually distinct functional units, as in assembling a computer application .

npm

  • national pest management
  • numbers prefer multiplication
  • node pleases me
  • noisy pneumatic mnemonic
  • nonflavored percription medicine

node package manager

Bower

Package manager for the web

  • libraries
  • frameworks
  • utilities
  • assets
  • rainbows

 

let's make a component / module

identifying

modules for

distribution

Traits of a module candidate

  • fits into a problem pattern or category

  • has been implemented in other domain specific ways

  • it's encapsulate-able

identify

module

candidates

isolating

module

candidates

  • encapsulate the candidate functionality in place

  • identify the problem category the functionality solves

  • genericize the implementation

  • eliminate side effects

example

module

development

within an

ongoing project

  • start a new git repo

  • `npm/bower link`

  • unit tests are a must

  • documentation in readme.md

  • package.json `author`, `maintainers`, and `contributors` properties

start a new git repo

$ git init

$ git remote add origin <git-url>

npm link

~/projects/typeoOf $ npm link

...

~/projects/myApp $ npm link typeOf
~/projects/typeoOf $ bower link

...

~/projects/myApp $ bower link typeOf

bower link

unit tests are a must

describe('typeOf()', () => {
    
    it('should return the `type` of a thing', () => {
    
    ...

    });

});

document in the readme.md

#The Awesome `typeOf` module!

give it something and watch it return it's type.

```
typeOf(new Date()) // 'date' No Way!!!!
```

attribution in package.json

{
...
    author: "Gérald Caussé <bishop.causse@ldschurch.org>",
    maintainers: [
        "Portfolio Name <DL-Portfolio@ldschurch.org>",
        "Gary E. Stevenson <bishop.stevenson@ldschurch.org>",
        "Gérald Caussé <bishop.causse@ldschurch.org>",
        "Dean M. Davies <bishop.causse@ldschurch.org>"
        }
    ],
    contributors: [{
        "name": "David A. Bednar",
        "email": "elder.bednar@ldschurch.org"
    }]
...
}

lds-node

module

generator ftw

~/projects/my-module $ yo lds-node:module

git tags

$ git tag -a v1.0.1 -m "added additional use case"

registration

$ npm publish
$ bower register package-name git-endpoint

module

consuming

modules

$ npm install <package-name> --save
$ bower install <package-name> --save

reporting

bugs

  • contact maintainers
  • confirm it's a bug
  • fix it yourself!
  • add yourself as a contributor
  • get used to pull requests
  • you don't rev the version