Angular 6 库共享样式表

2023-12-23

如何设置 index.scss 并将变量、混合等的全局样式表导入到 Angular 6 库中?

Angular CLI 生成一个带有根组件和组件 scss 的 lib,但添加或导入到根组件的样式不可用于子组件。默认情况下,封装样式是有意义的,但我还找不到有关如何设置它的任何信息或示例。

角度.json"styles": [...]可用于此目的的路径"projectType": "application",似乎不适合使用"projectType": "library"任何一个。

在此先感谢您的帮助!


更新:我的项目是使用 Angular cli v6.0.5 启动的,遵循本指南:https://medium.com/@tomsu/how-to-build-a-library-for-angular-apps-4f9b38b0ed11 https://medium.com/@tomsu/how-to-build-a-library-for-angular-apps-4f9b38b0ed11

TL;DR 指南:

ng new my-app --style=scss
ng generate library my-library --prefix ml

这是 Angular 6 生成的文件结构:

    my-app
      projects/
        my-library/
          src/
            lib/
              shared/..
              widgets/..
              my-library.component.ts
              my-library.module.ts
            sass/
              _variables.scss
              styles.scss // <<< This is where I want to `@import 'variables';`, and for it to be available in all the components of the "my-library" project.
            public_api.ts
      src/
        app/
          app.module.ts // << imports projects/my-library/lib/my-library.module as "my-library".
        main.ts
        index.scss
        index.html
      README.md

封装版本:

    Angular CLI: 6.0.5
    Node: 10.2.1
    OS: darwin x64
    Angular: 6.0.3
    ... animations, common, compiler, compiler-cli, core, forms
    ... http, language-service, platform-browser
    ... platform-browser-dynamic, router

    Package                            Version
    ------------------------------------------------------------
    @angular-devkit/architect          0.6.5
    @angular-devkit/build-angular      0.6.5
    @angular-devkit/build-ng-packagr   0.6.5
    @angular-devkit/build-optimizer    0.6.5
    @angular-devkit/core               0.6.5
    @angular-devkit/schematics         0.6.5
    @angular/cli                       6.0.5
    @ngtools/json-schema               1.1.0
    @ngtools/webpack                   6.0.5
    @schematics/angular                0.6.5
    @schematics/update                 0.6.5
    ng-packagr                         3.0.0
    rxjs                               6.2.0
    typescript                         2.7.2
    webpack                            4.8.3

对于全局样式,我已经回答了这个问题 https://stackoverflow.com/a/55376370/1393400.

Update

For ng-packgr版本 9.x 及以上

不直接支持将资源复制到输出文件夹,如中所述这一页 https://github.com/ng-packagr/ng-packagr/blob/master/docs/copy-assets.md

{
  "$schema": "./node_modules/ng-packagr/package.schema.json",
  "name": "@my/library",
  "version": "1.0.0",
  "ngPackage": {
    "assets": [
      "CHANGELOG.md",
      "./styles/**/*.theme.scss"
    ],
    "lib": {
      ...
    }
  }
}

因此,在您的项目中,您可以通过以下方式从库导入文件来使用样式:

@import '@my/library/path-to-file/file-name.scss'

或使用显式相对路径(确保使用尽可能../按要求)

@import '../node_modules/@my/library/path-to-file/file-name.scss'

旧答案

**For other versions**
  1. 创建一个index.scss文件位于库的根文件夹中。如果你关注本指南来自 Angular https://angular.io/guide/creating-libraries,那么你的路径将是my-project/projects/my-library/index.scss。这也是您的文件夹所在的文件夹package.json is.

So, index.scss将是包含变量和 mixin 的文件

$grey: #222;
@mixin mymixin {
    background: #222;
}
  1. 使用以下命令将其包含在您的库 scss 文件中import
@import '../../index.scss';

或者您的组件 scss 文件所在的任何相对路径。

  1. 现在,为了在您的应用程序项目中包含此文件,请在构建后将其复制到 dist 目录。为此,请编辑 Angular 库的项目package.json文件(不是图书馆的)。
{
    "name": "my-project",
    "version": "1.0.0",
    "scripts": {
        "ng": "ng",
        "start": "ng serve",
        "build": "ng build && npm run copyScss",
        "test": "ng test",
        "lint": "ng lint",
        "e2e": "ng e2e",
        "copyScss": "xcopy \"projects\my-library\index.scss\" \"dist\\my-library\\\""
    },

    ...
}
  1. 现在,非常重要,不要使用ng build要构建您的库,请使用npm run build。这将自动执行复制命令。现在index.scss文件与您的库一起导出my-project/dist folder.

  2. 包括index.scss在您的应用程序项目的 scss 文件中

// ~ stands for the node_modules folder
@import '~my-library/index.scss';

现在,您在安装库的所有项目中都拥有了所有库 mixin。

Cheers!

PS变通办法并不是最优雅的解决方案,但当其他方法都不起作用时,它们就会变通!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 6 库共享样式表 的相关文章

随机推荐

  • 使用 Spring Data Elasticsearch 定义自定义日期格式和转换器

    我目前正在从 Spring Data Elasticsearch 3 2 x 迁移到 4 0 0 我正在删除一个JacksonEntityMapper 定义了一个自定义ZonedDateTimeDeserializer 使用Elastics
  • 30 秒定期任务轮询外部 Web 服务和缓存数据

    我正在寻求一些关于从 Domino 服务器端操作每 30 秒轮询一次外部 Web 服务的建议 快速了解一下背景 我们通过 TomTom API 跟踪汽车的位置 我们现在需要在我们的网络应用程序中显示这一点 覆盖到地图 谷歌 必应等 上 并与
  • 在 Haskell 中按长度过滤列表项

    我有一个像这样的清单 a ab abc abcd 如何获取仅包含长度 gt 2 的项目的列表 意味着结果是 abc abcd 娜塔莉的答案是完全正确的 但作为替代形式 你也可以将其写为 filter gt 2 length a ab abc
  • 如何使用moment js日历获取点击特定日期的事件名称..?

    我正在将日历集成到一个项目中 使用momentjs 我想根据日期选择显示事件名称 让我举一个例子 如果我选择日期 2018 04 01 当时我想显示自定义事件名称 这是我的 JavaScript 代码 Have this somewhere
  • iPhone 上的 OpenGL ES 2.0:GL_POINT_SMOOTH 使用 ES 2.0 绘制正方形,但适用于 ES 1.0

    我正在尝试使用顶点缓冲区对象来绘制圆 并在 iPhone 上的 OpenGL ES 2 0 中启用 GL POINT SMOOTH 来绘制点 我使用以下 ES 1 0 渲染代码在 iPhone 4 上成功绘制圆圈 glVertexPoint
  • JBoss 7:JNDI 查找

    一段时间后 我远程访问了在 JBoss 7 1 1 下运行的无状态 EJB 使用属性对象 Properties jndiProps new Properties jndiProps put Context INITIAL CONTEXT F
  • Windows镜像如何使用Dockerfile的ARG指令

    我想在 dockerfile 中传递一个参数来构建我的 docker 映像 我在其他帖子和 Docker 手册中看到了如何执行此操作 但在我的情况下不起作用 这是我使用我的论点的代码摘录 ARG FirefoxVersion RUN pow
  • 在 Symfony2 中访问与 Bundle 相关的文件

    在 Symfony2 应用程序的路由配置中 我可以引用如下文件 somepage prefix someprefix resource SomeBundle Resources config config yml 有什么方法可以访问控制器或
  • libphp5.so 缺失

    我使用以下命令安装了 php 5 2 17 configure make make install 安装顺利 但我找不到 libphp5 so 文件 任何人都可以建议我出了什么问题以及如何修复此错误 尝试 libapache2 mod ph
  • 如何使用 mongoexport 导出排序数据?

    我在 mongo 中有一个集合 其中包含名称和计数字段 name myName count 5 是否可以使用 mongoexport 按计数对数据进行排序并导出为 json 从 MongoDB 2 6 开始 您可以通过 sort to mo
  • 使用 标签代替 图标有哪些优点/缺点?

    Facebook 的 HTML 和 Twitter Bootstrap HTML v3 之前 都使用 i 标签来显示图标 然而 从HTML5 规范 http www w3 org International questions qa b a
  • 使用 F# 中的 Applicative 功能构建记录

    假设有一个type r A int B string C int D string 和一些值 let aOptional int option let bOptional string option let cOptional int op
  • 相当于张量流中的 numpy.digitize

    我正在研究一个使用的自定义损失函数numpy digitize 内部 对于一组参数 损失最小化bins数字化方法中使用的值 为了使用tensorflow优化器 我想知道是否有等效的实现digitize in tensorflow 如果没有
  • Google 图表背景颜色不适用于示例代码

    我使用的代码来自示例页面 https developers google com chart interactive docs gallery barchart创建水平条形图 选项backgroundColor适用于其他图表类型 例如thi
  • MooTools 的 Function.prototype.overloadSetter() 是做什么的?

    我正在浏览 MooTools 源代码来尝试理解它 implement and extend 公用事业 每个的定义指的是这样定义的函数 var enumerables true for var i in toString 1 enumerab
  • 禁用 RStudio 中的所有断点

    有没有办法禁用 RStudio 中的所有断点 我查看了 RStudio 文档并进行了谷歌搜索 但找不到方法 我也很好奇 特别想了解断点的概述 I ran grep在我的项目文件夹中 这是我发现的 首先 打开 RStudio 后 断点不会显示
  • swift 中的 T.Type 是什么

    谁能告诉我什么是T Type当我使用JSONDecoder decode 我认为它是解码我编码的数据的类型 很多例子都使用上面的方法 如下所示 JSONEncoder decode People self from data 如果我检查该方
  • 插件“react”中的错误与之间发生冲突

    我在我的主 React 应用程序中使用另一个 React 存储库 我们称之为设计 作为 git 子模块 我使用 webpack 来构建主应用程序 将子模块集成到应用程序中后 我在 webpack 构建过程中收到以下错误 ERROR in P
  • 如何使用 widgets.SelectMultiple() 交互地选择要绘制的系列?

    背景 类似的问题已被问到here https stackoverflow com questions 12891860 interactive selection of series in a matplotlib plot 但不是很具体
  • Angular 6 库共享样式表

    如何设置 index scss 并将变量 混合等的全局样式表导入到 Angular 6 库中 Angular CLI 生成一个带有根组件和组件 scss 的 lib 但添加或导入到根组件的样式不可用于子组件 默认情况下 封装样式是有意义的