【问题标题】:PrimeNG cannot be used in Angular libraries?PrimeNG 不能在 Angular 库中使用?
【发布时间】:2019-12-05 11:51:04
【问题描述】:

我对primeng和angular感到头疼,当我尝试将primeng添加到Angular的库时,这一切都会发生。

接下来是我做的步骤。

ng g library generales

然后我尝试在使用生成的库上安装primeng

npm install primeng --save
npm install primeicons --save

所以这些依赖项被添加到 package.json 作为库的依赖项,所以它很酷没有问题。 然后我想例如使用primeng表,所以我添加TableModule 到 GeneralesModule 的导入数组。 如果我尝试编译它说它需要 angular/cdk 和材料依赖项,所以我使用以下命令安装它们

npm install --save @angular/material @angular/cdk @angular/animations 

我在使用primeng-table的库generales上制作我的组件,我也在exports数组上声明了这个组件,因为我想在库外使用它。

然后我转到源并将 GeneralesModule 添加到 imports 数组中,这样我就可以使用它的所有可导出组件,并在 src/app 中创建一个组件,该组件使用位于 generales 库中的组件的选择器。

好的,然后我用ng serve 启动它,它按预期工作,但如果我尝试使用ng build --prod,它会给我以下错误:

ERROR in ./src/app/app.module.ngfactory.js
Module not found: Error: Can't resolve '@angular/cdk/bidi' in 'C:\Users\tihom\Desktop\projects\testing\primengTesting\src\app'
ERROR in ./src/app/app.module.ngfactory.js
Module not found: Error: Can't resolve '@angular/cdk/platform' in 'C:\Users\tihom\Desktop\projects\testing\primengTesting\src\app'
ERROR in ./src/app/app.module.ngfactory.js
Module not found: Error: Can't resolve '@angular/cdk/scrolling' in 'C:\Users\tihom\Desktop\projects\testing\primengTesting\src\app'
ERROR in ./src/app/app.module.ngfactory.js
Module not found: Error: Can't resolve 'primeng/components/common/shared' in 'C:\Users\tihom\Desktop\projects\testing\primengTesting\src\app'
ERROR in ./src/app/app.module.ngfactory.js
Module not found: Error: Can't resolve 'primeng/components/dropdown/dropdown' in 'C:\Users\tihom\Desktop\projects\testing\primengTesting\src\app'
ERROR in ./src/app/app.module.ngfactory.js
Module not found: Error: Can't resolve 'primeng/components/paginator/paginator' in 'C:\Users\tihom\Desktop\projects\testing\primengTesting\src\app'
ERROR in ./src/app/app.module.ngfactory.js
Module not found: Error: Can't resolve 'primeng/components/table/table' in 'C:\Users\tihom\Desktop\projects\testing\primengTesting\src\app'

为什么会这样?为什么当它安装在 Generales 库上时,它试图在 src 上查找材料和底漆?

我尝试将primeng和material安装到src并删除了上面的错误,但给了我另一个:

ERROR in : Illegal state: Could not load the summary for directive Dir in C:/Users/tihom/Desktop/projects/testing/primengTesting/projects/generales/node_modules/@angular/cdk/bidi/typings/index.d.ts.

我的库 package.json

{
  "name": "generales",
  "version": "0.0.1",
  "peerDependencies": {
    "@angular/common": "^7.2.0",
    "@angular/core": "^7.2.0"
  },
  "dependencies": {
    "@angular/animations": "^8.1.3",
    "@angular/cdk": "^8.1.1",
    "@angular/material": "^8.1.1",
    "primeicons": "^2.0.0",
    "primeng": "^8.0.2"
  }
}

我的源包.json

{
  "name": "primeng-testing",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/common": "~8.1.3",
    "@angular/compiler": "~8.1.3",
    "@angular/core": "^8.1.3",
    "@angular/forms": "~8.1.3",
    "@angular/platform-browser": "~8.1.3",
    "@angular/platform-browser-dynamic": "~8.1.3",
    "@angular/router": "~8.1.3",
    "core-js": "^2.5.4",
    "rxjs": "~6.5.2",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.801.2",
    "@angular-devkit/build-ng-packagr": "~0.801.2",
    "@angular/cli": "~8.1.2",
    "@angular/compiler-cli": "~8.1.3",
    "@angular/language-service": "~8.1.3",
    "@types/node": "~8.9.4",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "^5.0.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~3.1.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "ng-packagr": "^5.1.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tsickle": "^0.35.0",
    "tslib": "^1.9.0",
    "tslint": "~5.11.0",
    "typescript": "~3.4.5"
  },
  "peerDependencies": {}
}

我希望在库的外部使用者(例如 src)上使用 primeng 功能,只需安装一次而不是多次。

【问题讨论】:

  • 我很确定,但我认为您的 dependenciespeerDependencies 不兼容。你能改变它们然后测试吗?

标签: angular angular-material primeng


【解决方案1】:

如果您在 PrimeFaces Github 上查看相同的问题,给出的答案似乎有效,至少在我的情况下。

https://github.com/primefaces/primeng/issues/7993

简而言之,由于您的 src/package.json 文件(应用程序项目)需要具有那些(PrimeNg、PrimeIcons、CDK、Material 和 Animations)依赖项,因此只需将这些添加到 src/package.json 中的依赖项,清理并重建(清除 nodes_module 和 npm cache ,然后运行 ​​npm i ,然后运行 ​​ng serve 和 ng build --prod )。 然后,您只需将这些依赖项移动到库 package.json 中的 PeerDependencies 中:安装时,如果这些依赖项不存在,npm 会警告您的用户安装它们。

【讨论】:

    【解决方案2】:

    您正在使用 PrimeNG 版本 8 和 Angular 版本 7。至少我在您的对等依赖项中看到了 Angular 7。

    它们不匹配。升级到 Angular 8 或降级到 PrimeNG 7,并确保在 node_modules 中安装了正确的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-29
      • 2017-10-19
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多