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
Post a Comment