aurelia-cli 生成器无法导入依赖项

aurelia-cli generator cannot import dependencies

我正在使用带有打字稿的 Aurelia-cli。我制作了一个生成器,它需要一个模型文件,因此它可以迭代其属性以生成相应的 CRUD,如下所示:

 let path = '../../src/modules/' + moduleName + '/models/' + modelFileName;
let mod = require(path);
let item = new mod[modelClassName]();

let keys = [];
for (var key in (item as any)){...}

请注意,我必须在此处要求模型使用 relative 路径。 这在最简单的情况下效果很好。当模型文件具有使用 绝对 路径(相对于项目的根目录)的额外导入时,问题就出现了,如下所示:

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

require() 调用失败并出现以下错误:

    Error: Cannot find module 'resources/enums/enum-node-type-xx'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> 
...

如果我在模型文件中使用模型本身的 relative 路径,生成器不会抱怨:

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

如果我引用来自带有导入的 NPM 模块的文件,也会出现此问题。

编辑

在 aurelia-cli 的代码上花了一些时间后,我可以看到它使用了一个(已弃用的)nodejs 功能,它通过在编译之前转译它们来覆盖 ts 文件的处理他们。编译后,有问题的导入通过 nodejs Module.require 解决,它只需要核心模块,no_modules 或相对路径(根据此处的文档:https://nodejs.org/docs/latest/api/modules.html#modules_file_modules

所以,由于生成器使用node进行模块解析,编译使用typescript编译,所以我似乎卡住了。有人看到解决办法吗?

因此,似乎没有一个简单的答案。我最终覆盖了 require() 方法以不同方式处理我的绝对路径,如解释的那样 here 并由 zewa666 在 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 but easy enough to understand
request = __dirname + '/../../src/' + request + '.ts';

  }
  return origRequire.call(this, request);
      }