标签: ng-packagr

在自定义 Angular 库中使用 Postcss

我使用postcsspostcss-css-modulesposthtml-css-modules在 Angular 应用程序中实现 CSS 模块。我还使用了@angular-builders/custom-webpack来实现这一点。

现在,我想对我的自定义 Angular 库做同样的事情。但是,我不能使用@angular-builders/custom-webpack,因为 Angular 库是使用ng-packagr构建的。

所以,@angular-builders/custom-webpack不能使用:https : //github.com/just-jeb/angular-builders/issues/356

另一方面,ng-packagr不支持postcsshttps : //github.com/ng-packagr/ng-packagr/issues/1471

我已阅读,它可以延长汇总配置(就是使用编译器NG-packagr在构建结束)在NG-packagr

https://github.com/ng-packagr/ng-packagr/blob/master/docs/DESIGN.md#rollup-config

但我没有找到任何文档来实现这一点。

有人知道怎么做吗?

我认为的其他解决方案,它使所有样式全局化并使用scss-bundle和 postcss编译它们,就像我在这里所做的那样:NodeJs Script that compiles scss files failed because of postcss rule for undefined variables

如果我可以使用lodash,我将能够用散列类名替换类名,就像这里建议的那样:在 JavaScript / TypeScript 文件中使用 [hash:base64:5]

但要做到这一点,我需要知道如何在ng-packagr的构建中调用lodash

有人知道怎么做吗?

任何其他解决方案都非常受欢迎。 …

webpack postcss rollupjs angular ng-packagr

8
推荐指数
1
解决办法
977
查看次数

angular-cli库创建辅助入口点

我正在尝试在我的角度npm包中创建我认为称为辅助入口点的东西。我想要以下两个切入点

@scope/data-service
@scope/data-service/models
Run Code Online (Sandbox Code Playgroud)

使用angular-cli生成基本包会生成以下结构

scope
????data-service
    ?   karma.conf.js
    ?   ng-package.json
    ?   ng-package.prod.json
    ?   package.json
    ?   tsconfig.lib.json
    ?   tsconfig.spec.json
    ?   tslint.json
    ?
    ????src
        ?   public_api.ts
        ?   test.ts
        ?
        ????lib
                data-service.component.spec.ts
                data-service.component.ts
                data-service.module.ts
                data-service.service.spec.ts
                data-service.service.ts
Run Code Online (Sandbox Code Playgroud)

根据ng-packagr 文档,您可以在名为datas的数据服务下添加一个文件夹,然后package.json在该文件夹中添加第二个文件夹,但是ng-packagr似乎使用的结构与angular-cli略有不同。理想情况下,我正在尝试对类似于https://github.com/angular/angular/tree/master/packages/common的结构进行建模,但只要公开了@scope/data-service@scope/data-service/models我就会很高兴。

当我尝试创建类似于ng-packager建议的结构时,我得到了

error TS6059: File 'C:/projects/data-service-app/projects/scope/data-service/models/src/index.ts' is not under 'rootDir' 'C:\projects\data-service-app\projects\scope\data-service\src'. 'rootDir' is expected to contain all source files.

当我将models目录移动到data-service\src目录中时,我的入口点是

@scope/data-service
@scope/data-service/src/models
Run Code Online (Sandbox Code Playgroud)

如何摆脱二级入口上的src?

使用angular-cli时,使用辅助入口点创建库的正确方法是什么?

angular-cli angular angular-library ng-packagr

7
推荐指数
2
解决办法
2228
查看次数

使用Angular CLI创建库时如何捆绑供应商字体

我正在使用Angular CLI(v7.x)创建一个组件库,并且无法弄清楚如何获得css规则包含在ng-packagr生成的dist文件夹中所需的第三方字体资产。

由于ng-packagr根据此问题不支持scss捆绑,因此我在后期构建任务中使用scss-bundle为我执行捆绑,并将最终捆绑的scss文件放入我的dist文件夹中。

但是,某些css规则(例如字体声明)包括对相对字体文件夹的url引用,而我还没有将其包含在dist文件夹中。

因此,例如,在我的角度库应用程序中,我有styles.scss文件,其中包含一个导入图标样式表的条目:

@import "~primeicons/primeicons.css";
Run Code Online (Sandbox Code Playgroud)

但是在我的node_modules文件夹中有一个相对的字体文件夹,这些质素位于这些文件夹中,用于CSS。

在此处输入图片说明

一种方法是,我可以写一个进一步的后期构建步骤,将它们捆绑在一起,并将它们放到dist文件夹中我串联的scss文件旁边的fonts文件夹中,以便可以解决它们。

我想知道是否有更聪明的方法,或者在构建库来执行此操作时是否使用ng-packager或angular-cli构建的方法?

更新资料

因此,我尝试了fonts在库项目根目录(实际上是在资产文件夹下)中拥有一个文件夹的方法,并在dist构建库后将其复制到文件夹的根目录中。

在我的运动场应用程序中,我尝试在实际的lib中使用打包的样式,我有以下内容:

my-lib-playground / src / styles.scss

@import "../../../dist/my-lib/styles";
Run Code Online (Sandbox Code Playgroud)

但是,当尝试使用CLI构建我的游乐场应用程序时,我得到:

ERROR in ./src/styles.scss (/Users/someone/Documents/Github/my-lib-playground/node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!/Users/someone/Documents/Github/my-lib-playground/node_modules/postcss-loader/src??embedded!/Users/someone/Documents/Github/my-lib-playground/node_modules/sass-loader/lib/loader.js??ref--14-3!./src/styles.scss)
Module Error (from /Users/someone/Documents/Github/my-lib-playground/node_modules/postcss-loader/src/index.js):
(Emitted value instead of an instance of Error) CssSyntaxError: /Users/someone/Documents/Github/my-lib-playground/dist/my-lib-playground/styles.scss:609:56: Can't resolve './fonts/open-sans-v15-latin-700.eot' in '/Users/someone/Documents/Github/my-lib-playground/projects/my-lib-playground/src'
Run Code Online (Sandbox Code Playgroud)

所以我的实际问题是:

在使用cli进行构建时,如何使正在使用的“游乐场”应用程序正确地包含\解析字体文件?相对于我当前的Playground应用,显然这些问题正在设法解决。什么是正确的解决方案?还是我做错了什么?

其它的办法

制作primeng一个peerDependency我的库,让开发人员负责添加primeng到他们的应用中,并angular.json根据以下丹尼尔建议的答案将相关样式包括在内。这是正确的方法,只有方法吗?

angular-cli primeng angular ng-packagr angular-cli-v7

7
推荐指数
1
解决办法
955
查看次数

构建角度库时无法读取未定义的属性“模块”

我正在将 angular 应用程序转换为 angular lib。我生成了 angular lib 项目并慢慢移动了模块。我现在在构建库时收到以下错误。

ng构建库

错误

Cannot read property 'module' of undefined
TypeError: Cannot read property 'module' of undefined
    at MetadataBundler.convertSymbol (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:312:61)
    at createReference (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:438:27)
    at MetadataBundler.convertReference (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:486:28)
    at MetadataBundler.convertExpression (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:415:37)
    at C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:364:79
    at Array.map (<anonymous>)
    at MetadataBundler.convertMember (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:364:47)
    at C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:349:70
    at Array.map (<anonymous>)
    at MetadataBundler.convertMembers (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:349:38)
Run Code Online (Sandbox Code Playgroud)

通常,当尝试在模块中错误地注册依赖项时会导致此错误。我如何才能找到我的配置的哪一部分导致此异常?

它在 angular 应用程序中运行良好。

angular ng-packagr

7
推荐指数
1
解决办法
3269
查看次数

ng-packagr 扩展汇总配置

我有一个自定义角度库,我想使用postcss自定义该库的构建。

就像 Angular 库是使用ng-packagr构建的一样,我需要扩展rollup.config.jsng -packagr来自定义我的库的构建。

事实上,我想通过rollup使用postcss,就像这里使用的那样: https: //www.learnwithjason.dev/blog/learn-rollup-css/

我在ng-packagr的文档中看到可以扩展汇总配置: https://github.com/ng-packagr/ng-packagr/blob/master/docs/DESIGN.md#rollup-config

但是,我没有找到任何有关如何执行此操作的文档或示例。

有人知道该怎么做吗?

有人能给我举个例子吗?

提前致谢。

javascript postcss rollupjs angular ng-packagr

7
推荐指数
0
解决办法
850
查看次数

Angular6.x库不公开public_api.ts中的所有成员

将我的项目更新到最新版本的Angular(6.0.4)后,我想最终将我的代码分成不同的库.

设置如下:

  1. CMS - 应用程序
  2. 客户 - 应用程序
  3. 核心 - 两个应用程序共享成员的库

我创建了3个空项目,并开始将所有组件和服务移动到正确的文件夹中.在最终完成所有这些编辑并删除TS错误后,我的构建仍然失败.好像我的CMS应用程序找不到我库中定义的任何模块,组件或服务.我的库正在构建,似乎包含所有这些元素.

ERROR in ./src/app/app.module.ts
Module not found: Error: Can't resolve '**\Webdictaat.Client\dist\core\core' in '**\Webdictaat.Client\projects\cms\src\app'
Run Code Online (Sandbox Code Playgroud)

我的库包含一个public_api.ts,看起来它正常工作但生成的core.ts文件不包含所有导出的成员.例如,wd-core.module位于public_api.d.ts的第二行

真正的问题:我的图书馆出了什么问题,并非所有成员都出口了?

//dist/core/public_api.d.ts
export * from './lib/avatar/avatar.component';
    export * from './lib/wd-core.module'; 
export * from './lib/modal-component/modal-component.component';
export * from './lib/game-elements/game-elements.module';
export * from './lib/core/html-outlet.directive';
export * from './lib/services';
export * from './lib/models';

//dist/core/core.d.ts
//No wd-core.module :(
/**
 * Generated bundle index. Do not edit.
 */
export * from './public_api';
export { BaseModalService as …
Run Code Online (Sandbox Code Playgroud)

angular ng-packagr

6
推荐指数
2
解决办法
3526
查看次数

如何在 ng-packagr 中只有辅助入口点

我有一个 Angular CLI 库,其中每个组件只能通过它们各自的入口点(如 Angular Material)导入:

import {Foo} from '@myLib/foo
import {Bar} from '@myLib/bar
Run Code Online (Sandbox Code Playgroud)

所以我不想要 ng-packagr 配置中的主要入口点。

我已经定义了所有次要入口点,我想删除主要入口点,因此用户不能只是“从 '@myLib导入 {Bar},但是 ng-package.json 需要一个 entryFile,当我离开 entryFile 时空我收到一个错误

错误:内部错误:无法获取入口点的符号

我必须在 entryFile 中添加至少一个有效的导出。

Angular Material 团队似乎已经做到了这一点 - https://github.com/angular/components/blob/master/src/material/index.ts

关于如何做到这一点的任何想法?

angular-material angular-cli angular ng-packagr

6
推荐指数
1
解决办法
2410
查看次数

如何在 angular 库中使用与 ng-packagr 捆绑的资产

我尝试将一些资产捆绑到我发布的 angular 库中。在我的角度工作区中,我在 - 文件src夹中找到了以下资产ng-package.json

{
  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
  "dest": "../../dist/project",
  "lib": {
    "entryFile": "src/public-api.ts"
  },
  "assets": [
    "src/assets"
  ]
}
Run Code Online (Sandbox Code Playgroud)

资产按原样成功复制,但如何在模板中使用资产(在本例中为图像)?例如,相关模板文件如下所示:

<div class="login">
  <img src="assets/image.png">
  <div class="actions">
    <ot-cis-input
      [placeholder]="'Bitte Nutzername eingeben'"
      [title]="'Nutzername'"
      [value]="username"
      (changedValue)="username=$event">
    </ot-cis-input>
    <ot-cis-input
      [title]="'Passwort'"
      [type]="'password'"
      (changedValue)="password=$event"></ot-cis-input>
    <div class="login-button">
      <ot-cis-button
        [isPrimary]="true"
        [isLoading]="loadingState"
        (click)="performLogin()">Einloggen</ot-cis-button>
    </div>
  </div>
</div>

Run Code Online (Sandbox Code Playgroud)

捆绑的库结构是这样的: dist/project/lib/library并且资产被放置在dist/project/src/assets/image.png

谁能帮我?

angular ng-packagr

6
推荐指数
0
解决办法
214
查看次数

如何在库中声明/包含导入的 scss 文件夹,以便可以在应用程序的 scss 文件中调用 @import?

目标:

我正在尝试从我的库中包含一个路径,以便我可以使用一个@import语句在我的应用程序中包含 scss 文件,如下所示:

@import "some-scss-in-my-lib"
Run Code Online (Sandbox Code Playgroud)

问题:

不幸的是,每次我尝试为我的应用程序提供服务时,我都会收到以下编译器错误:

SassError: Can't find stylesheet to import.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过的:

  • 在 Stackoverflow 上查找搜索给我带来了这个线程,它描述了与我现在面临的相同问题。而且我已经尝试styleIncludePathsZainu建议的那样包含属性的路径,但是在尝试为应用程序提供服务时,我遇到了上面“问题”部分中描述的确切问题。

  • 我试图在第一篇文章中设置stylePreprocessorOptionsGreatHawkeye这样的属性,并且可以@import在使用后设置 scss 文件ng build,但我不明白这是如何以及为什么会起作用,stylePreprocessorOptions但不是styleIncludePaths

  • 我还尝试在 google 上搜索,这使我找到了 Thread Unable to get styles bundled using styleIncludePaths 选项,在那里我找到了Alan Aguis的答案,但不幸的是,没有真正解释 styleIncludePaths 的真正用途。Alan Aguis说的唯一一句话是:

那是因为 styleIncludePaths 是为其他东西缩进的。

但正如所说,他没有说 styleIncludePaths 到底是什么,这让我更加困惑。

我还尝试查找有关在线程上添加样式包含路径的文档如何使用“styleIncludePaths”的 …

sass angular ng-packagr angular-json

6
推荐指数
2
解决办法
859
查看次数

如何将 SASS 选项传递给 Angular 库构建器

我有一个使用 Bootstrap 4.5 的 Angular 11 库
ng-packagr 使用 SASS 1.34,它会产生很多关于除法运算符弃用的警告,这在 Bootstrap 中被大量使用(https://sass-lang.com/documentation/break -更改/斜杠-div )

有问题的警告:

弃用警告:不推荐使用 / 进行除法,并将在 Dart Sass 2.0.0 中删除。

有一个选项:--quiet-deps可以在手动执行 sass 时使用,以隐藏这些警告。

我的问题是,在构建 Angular 库时如何以及在何处传递此选项?
它没有找到ng build命令或ng-package.json文件中的任何可能的配置

angular-cli angular ng-packagr

6
推荐指数
1
解决办法
632
查看次数