【问题标题】:How to re-use bootstrap's LESS variables in a meteor package如何在流星包中重用引导程序的 LESS 变量
【发布时间】:2015-05-21 21:28:17
【问题描述】:

我正在制作一个包,为引导程序提供一些额外的 ui 组件。我选择依赖(很棒的)nemo64:bootstrap 包来构建 LESS 引导库。

我的包必须提供额外的 LESS 文件,这些文件需要一些引导 LESS 变量(比如@brand-success)。最终用户很可能已经自定义了这些变量。

nemo64:bootstrap 包提供了一个包含引导变量的文件 (custom.bootstrap.import.less),供用户在需要的地方包含它。它也是期望用户自定义其引导程序的地方。所以我想把它包含在我的包的 less 文件中,但我不知道,从我的包中,最终用户将把这个文件放在哪里。

我可以假设给定的默认路径在 nemo64:bootstrap 包文档 (/client/lib/custom.bootstrap.import.less) 中有一个示例,但如果另一个包编写者做出不同的选择,这些包将不兼容。

有没有办法不对最终用户强制执行特定的文件架构?

【问题讨论】:

    标签: twitter-bootstrap meteor less package-development


    【解决方案1】:

    我不完全确定如何进行。但是您可以先注册一个与变量文件具有相同扩展名的句柄。这就是我的意思:

    var handler = function (compileStep, isLiterate) {
      // This will get the file path from the handler
      var variablesFilePath = compileStep._fullInputPath;
      console.log(variablesFilePath); // print the path to the server when starting
    }
    // handler may also be a callback
    Plugin.registerSourceHandler('bootstrap.import.less', {archMatching: 'web'}, handler);
    

    这将创建一个处理程序,您可以从中使用插件 API。更多信息可以参考Meteor API docs

    让我知道这是如何工作的。

    【讨论】:

      【解决方案2】:

      一种解决方案是将 LESS 文件导出为服务器上的资产,并使用构建插件将文件复制到应用程序中,以便用户可以在任何需要的地方@import

      这与nemo64:bootstrap 的操作方式相同,即a bit hacky,并且需要将包拆分为两个不同的包。我在gist中解释了所有内容

      【讨论】:

        【解决方案3】:

        据我了解,用于编译 Bootstrap 的 CSS 的软件包(例如 nemo64::bootstrap)仅有意义,因为 metror 的默认 Less 编译器会将每个 less 文件编译到单个 css 文件中。除非您的 Less 文件的名称以下划线 (_) 开头,否则它将被编译。

        在编译 Bootstrap 时,您应该只编译 bootstrap.less 文件,所有其他文件只是部分文件。部分应该只被导入而不是在 CSS 文件中编译。 Bootstrap 的部分文件名不以下划线开头,因此使用 nemo64::bootstrap 等包来编译 Bootstrap 并允许您稍后更新 Bootstrap。

        对于您的软件包,您可以自己包含 Bootstrap Less 代码。您还应该内置 Less 编译器,并确保它只编译您的主文件。可以在以下位置找到示例:https://atmospherejs.com/bassjobsen/less-pleeease

        在上述步骤之后,您的主要 less 文件可以包含:

        @import "bootstrap";
        @import "overrides";
        

        等等

        【讨论】:

        • 我不想自己包含boostrapless代码,因为最终用户可能已经定制了它的boostrap less。或者,也许我错过了您的回答中的某些内容。但是谢谢,因为您的评论使我找到了另一种解决方案(请参阅我的回答)
        • 如果自定义意味着最终用户应该能够更改 Bootstrap 的 Less 变量,那么您应该注意到 Less 使用延迟加载并且变量的最后声明获胜。因此,您可以通过在之后定义每个变量来覆盖每个变量。另见lesscss.org/features/#variables-feature-lazy-loading
        猜你喜欢
        • 2018-10-11
        • 2013-01-04
        • 2015-07-31
        • 2015-03-26
        • 2015-01-05
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        相关资源
        最近更新 更多