pakman v0.11.5
pakman
A collection of tools for building package managers.
pakmanager
is an example (but fully functional) package manager.
Given a directory with a package.json
, pakman
can give you back concatonated normalized scripts that will run with a custom module loader - such as in the browser.
Features
- alternate dependency lists - searches in this order:
- package.json.ender.dependencies
- package.json.enderDependencies
- package.json.browserDependencies
- package.json.dependencies
- modulename aliasing - normalizes local requires as 'mymodule/submodule' or 'myprovidesalias/submodule'
- package.json.provides
- package.json.name
Demo
git clone git://github.com/coolaj86/node-pakman.git
cd node-pakman/tests
ls ../test_modules/foomodule/
node test-compile-local ../test_modules/foomodule/
API
In order to make debugging (and extension) simpler,
every API function is in it's own file in lib
and contains and point-and-shoot test in test
.
modules
Each module object looks something like this:
{
"package": "foomodule-browser", // npm name
"name": "corge",
"pathname": ".", // relative to package.json.lib
"filename": "corge.js",
"require": "../corge", // how this module was required by its parent
"modulepath": "foomodule-browser/corge",
"providespath": "foomodule/corge", // where package.json.provides is 'foomodule'
"requires": [
"./foo",
"bar"
],
"scriptSource": "(function () {\n \"use strict\";\n\n require('./foo');\n require('bar');\n\n}());\n",
"dependencyList": [ ... ], // other modules, ordered (by line number)
"dependencyTree": { ... }, // other modules, mapped by modulepath
// in the case that it is known the module cannot be found
"error": {
"stack": "Error: Couldn't find \"./doesnt-exist\"\n at onDirRead (./lib/get-script.js:50:18)",
"message": "Couldn't find \"./doesnt-exist\""
}
}
pakman
All API methods are attached to the pakman object.
var pakman = require('pakman')
;
console.log(Object.keys(pakman));
compile
Given a module path, and a render function, compiles all of the local dependencies (pre-normalized).
var compile = require('./lib/compile').compile
, fs = require('fs')
;
function render(module) {
return ''
+ '\n' + '// module: ' + module.modulepath + ' as ' + module.providespath
+ '\n' + '(function () {'
+ '\n' + module.scriptSource
+ '\n' + '}());'
+ '\n' + // footer'
+ '\n
;
}
function writeOut(err, compiled) {
fs.writeFile('app.js', 'utf8');
}
compile('/path/to/some/module', render, writeOut);
TODO: Provide package info and allow async rendering: function render(pkg, module, fn)
makePackageReady
Given a module path, makes the module package-ready - hands you back everything you need to template the dependency with your own packag system.
var makePackageReady = require('./lib/make-package-ready').makePackageReady
;
function handlePackageComponents(error, pkg, missing, unlisted, unused, local, pm, builtin) {
// error{} - couldn't read package.json, etc
// pkg{} - the package.json info
// missing[] - local files referenced, but not found
// unlisted[] - npm modules referenced, but not in package.json
// unused[] - npm modules in package.json, but not references
// local[] - all local modules, ordered as they would need to be listed in a browser package
// pm[] - all package-managed (npm) modules
// builtin[] - builtin modules (such as `window`, `document`, etc in the browser, or `Buffer` in node)
}
// the directory must contain a `package.json`
makePackage('/path/to/some/module', handlePackageComponents);
Found in lib/make-package-ready.js
Requires
sort-tree-by-types
reduce-tree
get-package-tree
normalize-package-dependencies
normalize-script-requires
getPackageInfo
Given a module path, gives the parsed package.json
with normalized main
and lib
(both will exist).
var getPackageInfo = require('./lib/get-package-info').getPackageInfo
;
function handlePackageInfo(error, pkg) {
// error{} - couldn't read package.json, wrong permissions, etc
// pkg{} - the normalized package.json info
}
getPackageInfo('/path/to/some/module', handlePackageInfo);
API Call Graph
- compile
- make-package-ready
- normalize-package-dependencies
- normalize-script-requires
- reduce-tree
- sort-tree-by-types
- get-npm-package-info
- get-package-info
- get-npm-package-info
- get-package-tree
- get-package-info
- get-module-tree
- get-module-leaf
- get-requires
- get-script
- get-file
- get-module-leaf
- get-npm-tree
- get-npm-package-info
- get-package-info
- make-package-ready
11 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
13 years ago
13 years ago
13 years ago
13 years ago
13 years ago
13 years ago
13 years ago