我正在创建一个包,为bootstrap提供一些额外的ui组件。我选择依赖于(强大的)nemo64:bootstrap包来获取LESS引导程序库。
我的包必须提供额外的LESS文件,这些文件需要一些引导LESS变量(比如@brand-success
)。最终用户可以很好地定制这些变量。
nemo64:bootstrap包提供了一个带有引导变量的文件(custom.bootstrap.import.less
),供用户将其包含在需要的位置。它也是用户需要自定义其引导程序的地方。所以我想把它包含在我的软件包的文件中,但我不知道,从我的软件包中,最终用户将把这个文件放在哪里。
我可以假设给出的默认路径在nemo64:bootstrap包文档(/client/lib/custom.bootstrap.import.less
)上有一个示例,但如果另一个包编写者做出不同的选择,则包将不兼容。
有没有办法不对最终用户强制执行特定的文件架构?
答案 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。
让我知道这是如何运作的。