AOT 构建尝试从@types而不是实际模块导入



当尝试将服务从 auth0-js 包添加到 DI 容器时,构建会尝试从node_modules/@types/auth0-js/index.js目录而不是node_modules/auth0-js/index.js加载index.js文件。

[21:50:57] 'build.bundles.app.aot' errored after 784 ms
[21:50:57] Error on fetch for @types/auth0-js/index.js at file:///Users/llwt/src/testing/angular-seed-advanced/node_modules/@types/auth0-js/index.js
    Loading dist/tmp/web.module.ngfactory.js
    Loading dist/tmp/main.web.prod.js
    Error: ENOENT: no such file or directory, open '/Users/llwt/src/testing/angular-seed-advanced/node_modules/@types/auth0-js/index.js'
    at Error (native)

我觉得我在这里一定缺少一些基本的东西。我已经在内森·沃克(Nathan Walker(的Angular-Advanced-Seed的一个分支中重现了这个问题,可以在这里找到。

包正在导入,如下所示:

import { WebAuth } from 'auth0-js';
// ...
export function authHttp() {
  return new WebAuth({
    domain: 'foo',
    clientID: 'bar',
  });
}
// ...
@NgModule({
//...
  providers: [
    { provide: WebAuth, useFactory: (authHttp) },
    // ...

如果我可以提供任何更具体的信息来帮助调试此问题,请告诉我。

对于将来偶然发现此问题的任何人来说,事实证明auth0-js库的类型定义中存在导致构建失败的错误。

编辑:对于现在正在查看此内容的任何人。该问题仍然存在,并在此"绝对类型"问题中被跟踪。

我遇到了同样的问题。不久:此问题在某种程度上是由WebAuth的DI引起的。
您必须像这样初始化 WebAuth:

import { WebAuth } from 'auth0-js'
class AuthService {
    auth0 = new WebAuth(config);
    constructor(private otherDependency: OtherDependency) {}
}

这使在测试中模拟WebAuth变得复杂。我能够简单地用 Jest 嘲笑它:

beforeEach(() => {
    require('auth0-js').WebAuth = function() {
      return webAuthMock;
    };
});

最新更新