izymodtask
Version:
modtask components for Izyware
148 lines (84 loc) • 4.75 kB
Plain Text
Node.js modtask component for Izyware.
If you are using npm (the Node.js package manager) always ensure that your npm is up-to-date by running:
`npm update -g npm`
Then use:
`npm install izymodtask`
## USING THE TOOL
This tool provides libraries for traditional modtask izyware apps. You may use the libraries by referencing the node_modules folder.
When integrating izyware modtask style components to native node runtime apps and you need to ldmod on a module, you can:
```
var mod = require('izymodtask').getRootModule().ldmod('path_to_module');
```
To see what the module resolution paths are for the context that you are using the code above, you can always use:
```
require('izymodtask').getRootModule().ldmod('s_root').cmdlineverbs.sysview();
```
If you need to launch cmdline based verbs from the node app, use the following syntax:
```
require('izymodtask').runCmd('sysview -- or your verb --')
```
When the verb is called inside the `g_handler` module, you can extract the command line config by:
```
modtask.cmdlineverbs.method = function() {
var config = modtask.ldmod('izymodtask/index').extractConfigFromCmdLine('method');
...
```
You can customize the izyware modtask search path by creating the following:
```
modtask/config/kernel/extstores/file.js
```
in the root of your node app.
Note: Current Directory = CD, IzyModtask Directory = ID, Thirdparty Components Directory = TD
Consider the following setup
CD = /tmp/curdir
ID = /plat/p/izymodtask
TD = /tmp/izymodtaskapp
node TD/test.js
rm -rf /tmp/izymodtaskpathtest;
mkdir -p /tmp/izymodtaskpathtest/curdir;
mkdir -p /tmp/izymodtaskpathtest/app;
mkdir -p /tmp/izymodtaskpathtest/thirdpartylib;
clear; cp -r /plat/p/izymodtask/izymodtaskpathtest/* /tmp/izymodtaskpathtest;cd /tmp/izymodtaskpathtest/curdir;node ../app/main.js
This is very a typical use case where a thirdparty app that uses izymodtask, is launched from a random location in the system. We will analyze the following scenarios:
### 1: getRootModule().ldmod('rel:appdep')
In this case, rel:... is relative to the rootModule which can vary depending on the platform (i.e. circus front-end will be bootstrap/version/., nodejs modtask will be izymodtask/.).
That is the reason why __contextualName was introduced in the later version to be able to 'position' the rootModule.
### 2: getRootModule().ldmod('./appdep')
should be the same as rel:appdep
### 3: getRootModule().ldmod('/appdep')
This will first use the absolute path to locate and load the module. If not found, then it will remove the begining slash and treat it as number 4 below. The fall back is crucial when reference packageless modules from chains, i.e.
['chain.importProcessor', ':test/assert/chain'],
### 4: getRootModule().ldmod('appdep')
will search using the iteratePathsToSearch and external resolver rules
## NOTE
for more details, visit https://izyware.com
# Change Log
# V5
* implement support for code based module search path definition
* Kernel.rootModule.usermodule.getModuleSearchPaths was added
* rootModule can now take an array
* this will make the modtask/... kernel/extstores/file optional and allow more flexibility in reusing existing modules in different contexts
* implement _modToPkgMap for kernel/path.toInvokeString
* implement expandStringEncodedConfigValues to allow passing complex JSON objects at commandline
* add stacktrace to module load errors
* added module loader customization feature
* prior to this 'require' relative paths were broken and all requires would have to have used absolute paths.
* add this to your module:
/* izy-loadobject nodejs-require */
...
module.exports = modtask;
* add a simple file look up for modnames that with '/' first before falling back to iteratePathsToSearch.
* add the __contextualName feature modules to allow customization of rel:.. path resolution
* otherwise ldmod('rel:modname') or ldmod('./modname') would not work
* improve verbosity control
* fixed izymodtask so that it does not eval ljs in index.js.
* full payload customization and manual build for customized solutions.
./ldo.sh mship izymodtask/build;cp ../__build/payloads/build/izymodtask/entrypoint/ljs.js ../izymodtask/ljs.js;
cp modtask/kernel/mod.js ../izymodtask/kernel;cp modtask/kernel/path.js ../izymodtask/kernel;
* relrequire is now available
* it will allow doing node style require using relative paths to the current izy module.
* this will alleviate the paths and search problems that customers have reported in the past