dart构建:需要将应用程序中的资产注入到依赖包中

时间:2018-11-01 14:05:30

标签: dart angular-dart dart-build

背景:我有一个包含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文件必须导入_variables.scss文件,所以 my_components 将需要依赖于 app_n ,这是不可能的。

我尝试通过以下方法解决此问题:在 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设置为all_packages(在 my_components 的构建器定义中),则构建器不会收到映射配置(来自 app_n中的“构建目标”部分) )。如果我将auto_apply设置为none,则构建器不再将 my_components 作为输入,因此它无法看到.default.scss文件并被其触发。 / p>

如果以前有人解决过类似的问题(或者有其他想法 n_em 如何将SASS变量注入到 my_components 依赖项中),我很想听听他们的意见的想法。否则,如果有人可以向我解释构建配置的范围,我将不胜感激:

  1. 为什么auto_apply: all_packages构建器看不到 app_n 中的配置?
  2. 为什么 app_n 中的目标定义中的构建器无法查看 my_components 中的资产?

如果您认为我的配置有误,可以尝试提取一个最小的示例。

2 个答案:

答案 0 :(得分:1)

我认为在构建系统中完全不支持将源生成到您依赖的包中。

angular_components程序包中,我们对在不同客户端应用程序中共享的组件采取了另一种方法。我们已经确定了可用于更改外观的覆盖样式的系统。

使用一组良好的默认样式构建共享组件。共享组件还提供了一个_mixins.scss文件,其中包含一组供客户端应用程序导入的Sass mixins。 mixins旨在正确覆盖更改组件主题所需的所有样式。

例如,这里的mixin允许您更改单选按钮的样式。

答案 1 :(得分:0)

事实证明,我的build.yaml配置和构建器本身存在一些错误,但最终使它运行了。我在酒吧发布了我的解决方案:https://pub.dartlang.org/packages/inject_assets_builder

自述文件包含完整示例的说明。

如果您在应用程序的多个位置中使用相同的组件,而只想对其中一些进行样式设置,那么nshanans答案是更好的选择。