如何在流星包中重用bootstrap的LESS变量

时间:2015-03-18 21:37:28

标签: twitter-bootstrap meteor less package-development

我正在创建一个包,为bootstrap提供一些额外的ui组件。我选择依赖于(强大的)nemo64:bootstrap包来获取LESS引导程序库。

我的包必须提供额外的LESS文件,这些文件需要一些引导LESS变量(比如@brand-success)。最终用户可以很好地定制这些变量。

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

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

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

3 个答案:

答案 0 :(得分:1)

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

这与nemo64:bootstrap执行此操作的方式相同,即a bit hacky并且需要将包拆分为两个不同的包。我在gist

中解释了所有内容

答案 1 :(得分:0)

据我所知,nemo64 :: bootstrap之类的软件包可以编译Bootstrap的CSS,因此默认情况下,metreor的默认编译器会将每个较少的文件编译到单个css文件中。除非Less文件的名称以下划线(_)开头,否则它将被编译。

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

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

完成上述步骤后,您的主要文件可以包含:

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

等等

答案 2 :(得分:0)

我不完全确定如何处理。但您可以从注册与变量文件具有相同扩展名的句柄开始。这就是我的意思:

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

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