问题标签 [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.
angular - 自动安装 Angular 库的依赖项
我们正在开发一个共享的小部件库@acme/widget-collection
,它是内部作为单独模块开发的所有小部件的集合 -@acme/widget1
等等@acme/widget2
。
这应该允许需要使用小部件的开发人员简单地导入@acme/widget-collection
而不需要单独导入所有小部件。
所以库命名为@acme/widget-collection
imports @acme/widget1
,当然@acme/widget2
,@acme/widget3
然后导出它们,以便在导入时可用@acme/widget-collection
。
在共享库中,我们将所有小部件定义peerDependencies
为package.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 i
或npm i @acme/widget-collection
将安装@acme/widget1
,@acme/widget2
并@acme/widget3
在node_modules
文件夹中。
angular - 创建 Angular 服务的 NPM 包的正确方法
我有一个 Angular 7 项目,我正在根据swagger.json
规范为(服务/模型)生成客户端。生成的客户端驻留在它们自己的api.module
. 我想使用 Angular CLI 打包这些服务和模型,ng build
并且yarn pack
.
- 为 npm 包导出服务的正确方法是什么?
每个服务都使用@Injectable({ providedIn: "root" })
而不是导入到api.module
. 我曾尝试对services/
andmodels/
目录使用桶或索引文件,但我无法摇动未使用的服务,这是创建包的主要原因之一(即标记它sideEffects: false
.
编辑
感谢不幸被删除的评论,ng-packagr
不能使用或使用桶。
有没有关于如何在没有桶的情况下出口服务的建议?我需要导出public_api
文件中的每个服务吗?
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
能够扩展它的原理图?
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 的提供者!
零件:
模板:
模块:
typescript - 使用 ng-packagr 时 Angular 通用构建失败?
我已经使用ng-packagr为我的控件创建角度包。它像美丽一样被创造出来。但是如果我在 angular-universal 示例中使用该包,它会在捆绑时引发以下错误
如果我创建正常的 angular-cli,也会出现同样的问题,但我已经通过升级 compiler-cli 包解决了,但普遍无法解决这个问题。
ng-packagr 配置
ng-package.json
包.json
它抛出 ts-lib 错误,我想解决这个问题,或者我想知道如何在 ng-packagr 中禁用ts-lib
angular - 角度库是否可以使用嵌套的 public_api.ts
我正在创建一个非常大的库,所以我很自然地想public_api.ts
为不同的巨大模块模块化。
但似乎我无法通过在根目录中这样的东西来实现这一点public_api.ts
:
ng-packagrng-package.json
使用的也是using which is a single .entryFile
一个简单的演示来展示这个案例。
任何想法将不胜感激,以更好地模块化大库。
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 库中的文件中引用类型?如果不是,那为什么?
我的沙盒在这里。
相关资源
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
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
在其中使用的.SecondProject
FirstProject
第一个项目文件:
package.json
ng-package.json
-
public_api.ts
我在FirstProject
-
- npm 运行打包程序
- 光盘区
- npm 包
然后我提到了包装SecondProject
在FirstProject
.
FirstProject 文件 -
package.json
app.module.ts
app.routing.ts
我做npm install
了FirstProject
,我看到节点模块下的引用正确创建,但我在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'
我无法理解我在这里缺少什么。
angular - @fortawesome/Angular-FontAwesome 带有 ng-packagr 的 npm 包
我们为我们的 Angular 项目创建了一个私有的 npm UI 包,其中包含我们的 UI 组件。现在我尝试将所有需要的图标从 FontAwesome 添加到库中。我们使用 ng-packagr 生成 npm 包,这可以正常工作。如果我是我们的包,那么我会遇到构建问题:
'WebUiModule' 模板编译期间出错 无法解析相对于 [object Object] 的 @fortawesome/angular-fontawesome。
我们的想法是,我们在 UI npm 包中定义所有需要的图标,并且只使用我们在那里定义的图标。