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



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

我的包必须提供额外的LESS文件,这些文件需要一些引导程序LESS变量(比如@brand-success)。最终用户完全可以自定义这些变量。

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

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

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

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

这与nemo64的方法相同:bootstrap这样做有点麻烦,需要将包拆分为两个不同的包。我在这个要点中解释了一切

据我所知,像nemo64::bootstrap这样的包编译bootstrap的CSS只有在默认情况下才有意义。metreor的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";

依此类推

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

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文档。

让我知道这是怎么回事。

最新更新