2017-08-04 36 views
0

少讓你mark an import as optional這樣的:馬克一個都不能少混入作爲可選

@import (optional) "foo.less"; 

我有我輸入可選其中包含我父文件中使用一個mixin一個都不能少文件。

如何將mixin的使用標記爲可選項,如果我導入的Less文件不存在,則渲染不會失敗?

我試過這個,在可選Less導入文件中設置@styleguide的規劃,但是不管@styleguide的值如何,當它實現.registerColors()不存在時,渲染失敗。

& when (@styleguide=true) { 
    .registerColors(... arguments ...); 
} 

我需要使用Less 2.5.3的解決方案。

+0

只需在您使用它的文件中定義一個具有相同名稱的空混音。 –

回答

1

Mixins in Less cascade,因此您可以在非可選代碼部分的任何位置簡單地定義一個空的混合。例如:

@import (optional) "some"; 

div { 
    .registerColors(red, red 2); 
} 

// non-optional stuff 

.registerColors(...) {} 

Demo。 當可選的導入定義了一個同名的mixin時,兩個mixin定義都會被調用。

0

我找到了解決問題的方法,無需將mixin標記爲可選。

  1. 我重構了.registerColors()接受單個變量;在我的情況下,一個顏色變量名稱列表。
  2. 我將調用中的顏色變量名稱提取到傳遞給mixin的單獨變量。
  3. 我將調用移到了可選less文件中。
  4. 我把電話給混入保護範圍內檢查變量的存在:

    @registeredColors: false; 
    & when not (@registeredColors = false) { 
        .registerColors(@registeredColors) 
    } 
    

這不正是我想要的東西。如果可選less文件不存在,則不會調用mixin(因爲該調用位於可選的mixin中)。如果參數變量不存在,感謝守衛,mixin也不會被調用。

總的來說,這種方法似乎簡化了整個工作。