【发布时间】:2018-08-29 03:49:47
【问题描述】:
TL;DR:我的问题是如何将我的一些 sass 文件捆绑到单个 sass 文件中?
我一直在开发一个 Angular 组件库,并用 ng-packagr 打包它。我们就叫它@my-lib/ngx-components吧。
我的 lib 的使用者将导入我的组件,例如 @my-lib/ngx-components/navbar。
我决定为组件添加主题支持。
例如,我有一个带有默认颜色(背景、文本、悬停等)的导航栏组件。我希望我的库的使用者能够用他们自己的主题覆盖这些颜色。这就是为什么我写了一个mixin 接受$theme 输入并覆盖一些css规则如下(这是我所拥有的基本版本)
_navbar-theme.sass
@mixin navbar-theme($theme)
$primary-color: map-get($theme, primary-color)
$secondary-color: map-get($theme, secondary-color)
$color: map-get($theme, color)
.navbar
background-color: $primary-color
color: $color
&:hover
background-color: $secondary-color
每个组件都有自己的*-theme.sass 文件。
我还有一个全局的 _theming.sass 文件,它导入所有这些如下
_theming.sass
@import './components/navbar/navbar-theme'
@import './components/button/button-theme'
@import './components/dropdown/dropdown-theme'
我想从我的库中导出这个_theming.sass 文件,这样人们就可以在他们自己的sass 文件中将此文件作为@import '~@my-lib/ngx-components/theming' 导入并开始使用所有可用的mixins。
如果他们想要自定义 navbar、button 等,他们应该能够通过单一导入使用这些 mixins。
我试图让它看起来像角度材料主题设置。
起初,我尝试了node-sass,它已经在我的依赖项中。但是,它尝试将 sass 构建到 css 中,因此它在输出文件中省略了 mixins。
然后,我看看 angular-material 做了什么。他们使用scss-bundle
我想“这正是我想要的”。但是,它需要 scss 文件,而不是 sass 文件。它无法读取sass 文件。
然后,我想“好吧,我可以放弃 sass 并开始使用 scss。如何将所有这些文件转换为 scss 而无需手动处理”。然后,我找到了sass-convert。 In this question 据说我可以在命令行中使用它。但是,当我使用 npm 全局安装 sass-convert 时,它没有给我一个命令行可执行文件。我想我需要Gulp 才能使用它。
我从一开始就避免使用Gulp,因为它意味着另一种学习工具,它增加了代码库的复杂性。
此时,我感觉就像"Hal fixing light bulb"
TL;DR:我的问题是如何将我的一些 sass 文件捆绑到单个 sass 文件中?
另外,如果你能想出一个需要 webpack 的解决方案,那也很好。
【问题讨论】:
标签: css angular webpack sass gulp