【问题标题】:How to import SCSS library with assets in Angular application?如何在 Angular 应用程序中导入带有资产的 SCSS 库?
【发布时间】:2018-05-24 09:13:02
【问题描述】:

我有一个打包为 npm 模块的 SCSS 库,它具有以下结构:

./index.scss
./partials/_foo.scss
./assets/foo.svg

_foo.scss 包含图像的相对路径:

.foo {
  background-image: url('../assets/foo.svg');
}

当我在 Angular 应用程序的 style.scss 中导入 index.scss 文件时,出现编译错误,因为编译器由于某种原因无法解析图像的路径,但是,路径是正确的(相对于原始 SCSS 文件)。

  1. 有没有办法帮助 Angular 正确解析此类图像?
  2. 有没有办法以某种方式改进库以使其更易于在 Angular 中使用?

我知道我可以使用一个变量来指定库中的基本路径,然后在我导入它的项目中覆盖它,但我宁愿不这样做,因为它会给库本身增加更多的混乱并要求最终开发人员覆盖该变量才能使用该库。

【问题讨论】:

  • 如果您不想使用基本路径,最好将 svg 转换为 base64
  • @JohnVelasquez 如果它是一个大图像并且只是偶尔使用怎么办?
  • 这真的取决于你,但我认为到目前为止将其转换为 base64 是最好的解决方案。
  • @JohnVelasquez 有没有办法在编译时自动将图像转换为 base64?
  • 也不知道,你可以再问一个问题,也许有人可以帮助你。

标签: angular sass compilation


【解决方案1】:

如果你使用url('~nameofnodemodule/assets/foo.svg')webpack应该可以找到它。

【讨论】:

  • 谢谢。是的,我也知道这种解决方法,但我宁愿不在库中使用自引用,因为它会变得更难,例如稍后重命名模块,它违反了 DRY 原则。
  • 我不认为你能做得比这更好,至少现在是这样。
  • 这是非常有用的信息,是的,我不认为你会做得比这更好,除非你投入一些构建过程来自动插入模块名称。
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 2018-11-26
  • 2019-03-29
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多