我创建了一个小的vue.js库,它使用scss进行样式化,并将其作为npm包发布。它适用于包中包含的默认主题。但是如果我想从使用npm包的应用程序中提供自定义主题,你会怎么做呢?
该库的最基本版本的来源是:https://github.com/gwildu/gwi-vue-components
这个想法是,您可以将样式文件夹粘贴到某处(例如,粘贴到您的应用程序目录或另一个npm包中),并将库包配置为从该复制目录中导入。
答案 0 :(得分:1)
我自己做了一些调查,发现自从多年来在sass中进行动态导入有一个很大的讨论。此issue(自2013年开始)宣称要添加此类功能(他们称之为load
)。不确定,sass的开发程度如何,以及何时支持此功能。现在我看到3种可能的解决方案:
@import '../../theme/index';
。您可以在您的包中的某个位置支持消费者然后必须复制到的主题的示例,例如,他的应用程序的根目录并根据他的需要进行调整。然后,在您的包中,您将从该目录中的consumer应用程序文件夹中导入主题。缺点是,包装不能开箱即用node_modules/your-library-package-folder/theme/
替换应用程序文件夹中的主题。这里要完成的是动态导入的方法(SASS尚不支持):
更新: 我尝试过3但未能获得有用的东西。这种方法的问题在于,当您将库更新为更高版本时,您必须以某种方式将您的客户主题与默认主题同步,而更高版本可能会以合理的方式处理太复杂。然后我尝试使用SASS的覆盖功能,如下所述:How to overwrite SCSS variables when compiling to CSS让我接近
该方法的问题是SASS不支持可选导入。具有自定义变量的文件必须存在于某处。因此,如果库再次更新,则必须同步库中已更改的每个组件/文件的自定义主题文件。显然,SASS也不希望在将来支持这样的功能:https://github.com/sass/sass/issues/779这很难过,因为在我看来,如果没有高度复杂的构建步骤就可以进行主题化。
总的来说,似乎SASS本身正在尽一切努力阻止简单的主题方法,这让我想到再次回到LESS。在我看来,没有一种简单的方法可以在SASS中进行静态主题,因为没有一种简单的方法可以在LESS中定义自定义函数。