问题标签 [ng-packagr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1889 浏览

angular - 自动安装 Angular 库的依赖项

我们正在开发一个共享的小部件库@acme/widget-collection,它是内部作为单独模块开发的所有小部件的集合 -@acme/widget1等等@acme/widget2

这应该允许需要使用小部件的开发人员简单地导入@acme/widget-collection而不需要单独导入所有小部件。

所以库命名为@acme/widget-collectionimports @acme/widget1,当然@acme/widget2@acme/widget3然后导出它们,以便在导入时可用@acme/widget-collection

在共享库中,我们将所有小部件定义peerDependenciespackage.json.

@acme/widgets-collection库导入项目后,在运行或构建项目时,我们收到以下错误 - error TS2307: Cannot find module @acme/widget1

如果我们手动安装依赖项,即npm i @acme/widget1 @acme/widget2 @acme/widget3它可以正常工作。

但是,我们试图避免手动安装所有依赖项,@acme/widget-collections因为这些依赖项不断变化,我们希望 npm 自动安装它们。

运行npm i @acme/widget-collection似乎没有安装它们。

是否有安装依赖项的 npm 本机方式?

如果没有,是否应该直接将它们安装ng-packagr@acme/widget-collection/node_modules文件夹中?

更新

将依赖项输入为“依赖项”而不是“peerDependencies”似乎会在运行时自动安装它们,npm i @acme/widget-collection但我不确定这是否是推荐的方式,因为我见过的大多数角度示例都使用peerDependencies. 这似乎有效:

并运行npm inpm i @acme/widget-collection将安装@acme/widget1@acme/widget2@acme/widget3node_modules文件夹中。

0 投票
0 回答
305 浏览

angular - 创建 Angular 服务的 NPM 包的正确方法

我有一个 Angular 7 项目,我正在根据swagger.json规范为(服务/模型)生成客户端。生成的客户端驻留在它们自己的api.module. 我想使用 Angular CLI 打包这些服务和模型,ng build并且yarn pack.

  1. 为 npm 包导出服务的正确方法是什么?

每个服务都使用@Injectable({ providedIn: "root" })不是导入到api.module. 我曾尝试对services/andmodels/目录使用桶或索引文件,但我无法摇动未使用的服务,这是创建包的主要原因之一(即标记它sideEffects: false.

编辑

感谢不幸被删除的评论,ng-packagr 不能使用或使用桶。

有没有关于如何在没有桶的情况下出口服务的建议?我需要导出public_api文件中的每个服务吗?

0 投票
1 回答
244 浏览

angular - 以角度编写构建示意图

我想用我自己的方式编写 ngpackagr 原理图。在我的自定义规则中,我执行以下操作:

export function testScehma(_options: any): Rule { return chain([ externalSchematic('@angular-devkit/build-ng-packagr', 'build', _options), (tree: Tree, _context: SchematicContext) => { tree.create('testFile.txt', 'This is a Test!!!'); return tree; } ]); }

然后我尝试运行:ng my-test-lib build

我收到以下错误: Error: Package "@angular-devkit/build-ng-packagr" was found but does not support schematics.

我在哪里可以找到ngpackagr能够扩展它的原理图?

0 投票
1 回答
5080 浏览

angular - 使用 ng-packagr 组件时“没有 ViewContainerRef 的提供者”

我使用 angular cli创建了一个组件ng generate library,其中一个组件*ngIf在模块内部使用。

在我的主项目中成功构建并安装库后,当我尝试使用该组件时No provider for ViewContainerRef出现错误。

版本:

@angular/cli 版本:“~7.0.6”,

@angular/* 版本:“~7.0.0”

错误:

ERROR 错误:StaticInjectorError(AppModule)[NgIf -> ViewContainerRef]: StaticInjectorError(Platform: core)[NgIf -> ViewContainerRef]: NullInjectorError: 没有 ViewContainerRef 的提供者!

零件:

模板:

模块:

0 投票
0 回答
196 浏览

typescript - 使用 ng-packagr 时 Angular 通用构建失败?

我已经使用ng-packagr为我的控件创建角度包。它像美丽一样被创造出来。但是如果我在 angular-universal 示例中使用该包,它会在捆绑时引发以下错误

如果我创建正常的 angular-cli,也会出现同样的问题,但我已经通过升级 compiler-cli 包解决了,但普遍无法解决这个问题。

ng-packagr 配置

ng-package.json

包.json

它抛出 ts-lib 错误,我想解决这个问题,或者我想知道如何在 ng-packagr 中禁用ts-lib

0 投票
1 回答
1672 浏览

angular - 角度库是否可以使用嵌套的 public_api.ts

我正在创建一个非常大的库,所以我很自然地想public_api.ts为不同的巨大模块模块化。

但似乎我无法通过在根目录中这样的东西来实现这一点public_api.ts

ng-packagrng-package.json使用的也是using which is a single .entryFile

一个简单的演示来展示这个案例。

任何想法将不胜感激,以更好地模块化库。

0 投票
0 回答
1381 浏览

typescript - 在没有三斜杠引用的 Angular 库中使用 typings.d.ts

在 Angular CLI 工作区中,我创建了一个库foo. 在 libraryfoo中,我添加了一个typings.d.ts文件。然后,我设法使用Typescript 三斜杠指令typings.d.ts引用了定义的类型。现在,我不想使用三斜杠指令,但删除指令会导致以下错误:foo.module.ts

我收到这个错误有点惊讶,因为typings.d.ts它是在目录中定义的,src而且我使用的是最新版本的 Typescript (v3.2.4)。因此,我希望编译器能够typings.d.ts开箱即用。我还尝试将以下内容添加到tsconfig.lib.json

我预计至少这个设置会生效,因为 ng-packagr 文档提到在 Angular CLI 项目中 tsconfig.lib.json 文件可能会被修改

所以,我的具体问题如下:是否可以typings.d.ts在不需要使用三斜杠引用的情况下从 Angular 库中的文件中引用类型?如果不是,那为什么?

我的沙盒在这里

相关资源

0 投票
1 回答
1877 浏览

angular - ng-packagr npm 安装错误:postinstall `opencollective postinstall`

我正在尝试构建一个 Angular 6 库,它需要 ng-packagr 作为依赖项。尝试 npm install ng-packagr(最新版本)时出现以下错误

Github中已经创建了一个问题。问题来自名为opencollective/opencollective-postinstall的ng-packagr的内部依赖项。我试过在环境变量中禁用它。但我仍然收到上述错误。其他人有办法安装 ng-packagr 吗?DISABLE_OPENCOLLECTIVE=true

0 投票
3 回答
7054 浏览

angular - 使用 ng-packagr 时出错:找不到模块:错误:无法解析

我无法导入在主项目中打包和引用的子模块之一中定义的组件。一切似乎都很好,但我仍然看到一个错误 -

./src/app/app.module.ts 中的错误找不到模块:错误:无法解析“C:\Users\anujin”中的“@first-project/second-project/app/regist ration/registration.component” \Documents\workspace-vs-code\ FirstProject\src\app' ./src/app/app-routing.module.ts 中的错误 找不到模块:错误:无法解析 '@first-project/second-project/ 'C:\Users\anujin\Documents\workspace-vs-code\ FirstProject\src\app' 中的 app/regist ration/registration.component'

我创建了两个项目 -

  • 第一个项目
  • 第二个项目

我创建了一个我需要RegistrationComponent在其中使用的.SecondProjectFirstProject

第一个项目文件:

package.json

ng-package.json-

public_api.ts

我在FirstProject-

  • npm 运行打包程序
  • 光盘区
  • npm 包

然后我提到了包装SecondProjectFirstProject.

FirstProject 文件 -

package.json

app.module.ts

app.routing.ts

我做npm installFirstProject,我看到节点模块下的引用正确创建,但我在npm start这里做了FirstProject,它给出了以下错误 -

./src/app/app.module.ts 中的错误找不到模块:错误:无法解析“C:\Users\anujin”中的“@first-project/second-project/app/regist ration/registration.component” \Documents\workspace-vs-code\ FirstProject\src\app' ./src/app/app-routing.module.ts 中的错误 找不到模块:错误:无法解析 '@first-project/second-project/ 'C:\Users\anujin\Documents\workspace-vs-code\ FirstProject\src\app' 中的 app/regist ration/registration.component'

我无法理解我在这里缺少什么。

0 投票
0 回答
67 浏览

angular - @fortawesome/Angular-FontAwesome 带有 ng-packagr 的 npm 包

我们为我们的 Angular 项目创建了一个私有的 npm UI 包,其中包含我们的 UI 组件。现在我尝试将所有需要的图标从 FontAwesome 添加到库中。我们使用 ng-packagr 生成 npm 包,这可以正常工作。如果我是我们的包,那么我会遇到构建问题:

'WebUiModule' 模板编译期间出错 无法解析相对于 [object Object] 的 @fortawesome/angular-fontawesome。

我们的想法是,我们在 UI npm 包中定义所有需要的图标,并且只使用我们在那里定义的图标。