UNPKG

izymodtask

Version:
148 lines (84 loc) 4.75 kB
# izymodtask Node.js modtask component for Izyware. ## INSTALLATION 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. ## Path Resolution Use Cases for kernel/extstores/file 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; ## < V5 * 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