path - aurelia-cli generator cannot import dependencies -


i'm using aurelia-cli typescript. there generator made requires model file can iterate on properties in order generate corresponding crud this:

 let path = '../../src/modules/' + modulename + '/models/' + modelfilename; let mod = require(path); let item = new mod[modelclassname]();  let keys = []; (var key in (item any)){...} 

note have require model using relative path here. works in simple cases. problem comes when model file has additional imports use absolute path (relative root of project) this:

import { enumnodetypexx } 'resources/enums/enum-node-type-xx'; 

where require() call fails following error:

    error: cannot find module 'resources/enums/enum-node-type-xx'     @ function.module._resolvefilename (module.js:469:15)     @ function.module._load (module.js:417:25)     @ module.require (module.js:497:17)     @ require (internal/module.js:20:19)     @ object.<anonymous>  ... 

if make use of path relative model in model file, generator doesn't complain:

import { enumnodetypexx } '../../../resources/enums/enum-node-type-xx'; 

the problem happens if reference file coming npm module imports.

edit

after spending time on aurelia-cli's code, can see uses (deprecated) nodejs feature overrides processing of ts files transpiling them before compiling them. after compilation, problematic import resolved nodejs module.require can require core modules, no_modules or relative path (according doc here: https://nodejs.org/docs/latest/api/modules.html#modules_file_modules

so, generator uses node module resolution , compilation uses typescript compilation, seem stuck. see way out of this?

so, there doesn't seem easy answer this. ended overriding require() method handle absolute paths differently explained here , pointed zewa666 in my github issue.

 const moduleproto = object.getprototypeof(module)   const origrequire = moduleproto.require   moduleproto.require = function(request) {     if (request.startswith('resources')    || request.startswith('services')    || request.startswith('modules')) {//very naive approach easy enough understand request = __dirname + '/../../src/' + request + '.ts';    }   return origrequire.call(this, request);       } 

Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -