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

How to re-use bootstrap's LESS variables in a meteor package

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

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

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

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

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

据我所知,nemo64::bootstrap 等包编译 Bootstrap 的 CSS 只有意义,因为默认情况下,metreor 的 Less 编译器将每个 less 文件编译成单个 css 文件。除非您的 Less 文件的名称以下划线 (_) 开头,否则它将被编译。

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

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

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

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

等等

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

同样的方法nemo64:bootstrap does it, which is a bit hacky and require to split the package in two different packages. I explained everything in this gist

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

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.

告诉我这是怎么回事。