背景:我有一个包含 Angular(5.0.0,Dart 2.0.0)组件(我们称之为my_components)的包,我在许多客户项目(app_1,app_2,...)中使用它。这些应用程序必须覆盖我必须反映客户企业身份的几乎每个组件的一些 CSS 属性(例如颜色)。这里明显的选择是将值定义为app_n包中_variables.scss
文件中的SASS 变量。(我不能使用 CSS 自定义属性,因为需要 IE 支持(我知道 Angular 不正式支持 IE))这里的问题是组件 scss 文件必须导入文件,所以my_components需要依赖app_n_variables.scss
,这是不可能的。
我试图通过以下方式解决这个问题:在my_components我有一个文件lib/_variable.default.scss
. 组件 scss 文件仍包含该行@import package:my_components/_variables.scss
。我编写了一个InjectAssetsBuilder
在 .default.scss 文件扩展名上运行并生成 .scss 文件的程序。该构建器是可配置的,并且需要在 app_n 的build.yaml'my_components|lib/_variables.scss': 'app_n|web/variables.scss'
配置中进行映射。构建器应该由 .default.scss 文件触发,然后将自定义文件放在它旁边,以便可以通过组件导入找到它。
但是,我无法让它工作。如果我设置auto_apply
为(在my_componentsall_packages
的构建器定义中),构建器不会收到映射配置(来自app_n的构建目标部分)。如果我设置为,则构建器不再将my_components作为输入,因此它无法看到并被 .default.scss 文件触发。auto_apply
none
如果有人以前处理过类似的问题(或者有另一个想法app_n如何将 SASS 变量注入my_components依赖项),我很想听听他们的想法。否则,如果有人可以向我解释构建配置的范围,我将不胜感激:
- 为什么
auto_apply: all_packages
构建器看不到app_n中的配置? - 为什么app_n中目标定义的构建器无法看到my_components中的资产?
如果您认为我的配置有误,我可以尝试提取一个最小示例。