angular - 使用外部类作为 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 的外部节点模块进入时,这不起作用。有没有办法让它工作?
解决方案
推荐阅读
- mysql - 在 SQL 查询中转换列名与转换值有何不同
- docker - docker-compose 子文件夹未出现在卷文件夹中
- c# - 在交互 c# 期间添加异步值
- django - 如何将 Django 3 中的 mp4 视频流式传输到 Vue.js
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 359 中的字节 0x92:无效的起始字节
- javascript - 错误计算getHours的日期之间的差异?
- php - MySQL连接多个列(所有列都包含相同的整数范围)
- java - Spring Boot 看不到 Aspect 的
- javascript - 使用 javascript 从浏览器页面获取当前显示的图像
- python-3.x - 语法错误:python 3.8