首页 > 解决方案 > 使用外部类作为 Angular 提供者

问题描述

我已经构建了一个 typescript 库,它与 Rollup.js 捆绑在一起并部署为 npm 模块。我想将这些类之一用作单例,所以我想到了使用 Provider.useClass,例如:

import {FeatureToggleService} from 'cxone-client-services-platform';
...
providers:[
{ provide: FeatureToggleService, useClass: FeatureToggleService}
]

这是 npm 模块的 package.json 文件。

在此处输入图像描述

这是 index.d.ts 文件:

在此处输入图像描述

然而,提供者声明导致 AOT 大混乱。

对于使用 AOT 的生产版本(Angular 8),我收到以下错误。

./src/ng2/app/app.module.ngfactory.js 中的错误找不到模块:错误:无法解析“cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service”在'/Users/scott/code/cxone/hybrid-webapp-pm/src/ng2/app'

当我打开详细日志记录时,我看到如下内容:

ERROR in ./src/ng2/app/app.module.ngfactory.js
Module not found: Error: Can't resolve 'cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service' in '/Users/scott/code/cxone/hybrid-webapp-pm/src/ng2/app'
resolve 'cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service' in '/Users/scott/code/cxone/hybrid-webapp-pm/src/ng2/app'
  Parsed request is a module
  using description file: /Users/scott/code/cxone/hybrid-webapp-pm/package.json (relative path: ./src/ng2/app)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module
      looking for modules in /Users/scott/code/cxone/hybrid-webapp-pm/
        using description file: /Users/scott/code/cxone/hybrid-webapp-pm/package.json (relative path: .)
          Field 'browser' doesn't contain a valid alias configuration
          using description file: /Users/scott/code/cxone/hybrid-webapp-pm/package.json (relative path: ./cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              /Users/scott/code/cxone/hybrid-webapp-pm/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service doesn't exist
            .ts
              Field 'browser' doesn't contain a valid alias configuration
              /Users/scott/code/cxone/hybrid-webapp-pm/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service.ts doesn't exist
            .tsx
              Field 'browser' doesn't contain a valid alias configuration
              /Users/scott/code/cxone/hybrid-webapp-pm/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service.tsx doesn't exist
            .mjs
              Field 'browser' doesn't contain a valid alias configuration
              /Users/scott/code/cxone/hybrid-webapp-pm/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service.mjs doesn't exist
            .js
              Field 'browser' doesn't contain a valid alias configuration
              /Users/scott/code/cxone/hybrid-webapp-pm/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service.js doesn't exist
            as directory
              /Users/scott/code/cxone/hybrid-webapp-pm/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service doesn't exist
      /Users/scott/code/cxone/hybrid-webapp-pm/src/ng2/app/node_modules doesn't exist or is not a directory
      /Users/scott/code/cxone/hybrid-webapp-pm/src/ng2/node_modules doesn't exist or is not a directory
      /Users/scott/code/cxone/hybrid-webapp-pm/src/node_modules doesn't exist or is not a directory
      /Users/scott/code/cxone/node_modules doesn't exist or is not a directory
      /Users/scott/code/node_modules doesn't exist or is not a directory
      /Users/scott/node_modules doesn't exist or is not a directory
      /Users/node_modules doesn't exist or is not a directory
      /node_modules doesn't exist or is not a directory
      looking for modules in /Users/scott/code/cxone/hybrid-webapp-pm/node_modules
        using description file: /Users/scott/code/cxone/hybrid-webapp-pm/package.json (relative path: ./node_modules)
          Field 'browser' doesn't contain a valid alias configuration
          using description file: /Users/scott/code/cxone/hybrid-webapp-pm/node_modules/cxone-client-services-platform/package.json (relative path: ./lib/feature-toggle-utils/feature-toggle.service)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              resolved symlink to /Users/scott/.nvm/versions/node/v10.16.0/lib/node_modules/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service
                using description file: /Users/scott/.nvm/versions/node/v10.16.0/lib/node_modules/cxone-client-services-platform/package.json (relative path: ./lib/feature-toggle-utils/feature-toggle.service)
                  no extension
                    Field 'browser' doesn't contain a valid alias configuration
                    resolved symlink to /Users/scott/code/cxone-client-platform-services/dist/lib/feature-toggle-utils/feature-toggle.service
                      using description file: /Users/scott/code/cxone-client-platform-services/dist/package.json (relative path: ./lib/feature-toggle-utils/feature-toggle.service)
                        no extension
                          Field 'browser' doesn't contain a valid alias configuration
                          /Users/scott/code/cxone-client-platform-services/dist/lib/feature-toggle-utils/feature-toggle.service doesn't exist
                        .ts
                          Field 'browser' doesn't contain a valid alias configuration
                          /Users/scott/code/cxone-client-platform-services/dist/lib/feature-toggle-utils/feature-toggle.service.ts doesn't exist
                        .tsx
                          Field 'browser' doesn't contain a valid alias configuration
                          /Users/scott/code/cxone-client-platform-services/dist/lib/feature-toggle-utils/feature-toggle.service.tsx doesn't exist
                        .mjs
                          Field 'browser' doesn't contain a valid alias configuration
                          /Users/scott/code/cxone-client-platform-services/dist/lib/feature-toggle-utils/feature-toggle.service.mjs doesn't exist
                        .js
                          Field 'browser' doesn't contain a valid alias configuration
                          /Users/scott/code/cxone-client-platform-services/dist/lib/feature-toggle-utils/feature-toggle.service.js doesn't exist
                        as directory
                          /Users/scott/code/cxone-client-platform-services/dist/lib/feature-toggle-utils/feature-toggle.service doesn't exist
                    /Users/scott/.nvm/versions/node/v10.16.0/lib/node_modules/cxone-client-services-platform/lib/feature-toggle-utils/feature-toggle.service doesn't exist
                  .ts

有更多的日志,但它似乎很像我发布的内容。似乎它没有在 node_modules 中查找包。

如果我在 Angular 应用程序本身中创建一个简单的类,例如 export class ScottService {}

我可以

providers:[
{ provide: ScottService, useClass: ScottService}
]

当类从已编译为 Javascript 的外部节点模块进入时,这不起作用。有没有办法让它工作?

标签: angular

解决方案


推荐阅读