我正在开发一个项目,我们希望用户能够定义自定义颜色。我们正在运行最新版本的Meteor,其中包括更少的包。
现在所有颜色都是位于单个theme.lessimport文件中的变量,该文件在处理过程中包含在内。整个站点的所有颜色(以及许多后续较少的文件)都是从这些少数变量生成的。
我们的想法是为每个用户生成一个新的userTheme.lessimport文件,如果存在,可以在theme.lessimport文件之后导入,以覆盖具有自定义值的变量。如果你将文件物理地添加到目录中,这一切都可以很好地完美地工作,但我似乎无法想到一种动态/编程方式的方法。
我开始怀疑这是否可以用更少的时间来完成。
除了这种不便之外,我们正在做的事情已经不那么完美了,所以我真的希望能够做到这一点。希望有人可以传授一些智慧或方向。
答案 0 :(得分:0)
看看bootstrap3-less包如何实现变量和mixins。特别是其自述文件的高级用法部分。
“如果你想@import一个文件,请给它扩展名.import.less以防止Meteor独立处理它。”因此,在您的实例中,您将命名您的主题文件:theme.import.less
答案 1 :(得分:0)
当然你可以做到。只需使用“fs”节点模块。
这是一个相当愚蠢的例子。当你这么做时有很多陷阱,但是对于一个基本的概念验证,请检查一下。
if (Meteor.isClient) {
Template.hello.greeting = function () {
return "Welcome to less_injector_meteor_test.";
};
Template.hello.events({
'click #button': function () {
var css = "body {background: " + $("#color").val() + ";}";
Meteor.call("writeToUserThemeFile", css);
}
});
}
if (Meteor.isServer) {
Meteor.methods({
"writeToUserThemeFile" :function(css) {
var fs = Npm.require("fs");
var path = "/Users/charnjitsingh/Desktop/less_injector_meteor_test";
fs.writeFile(path+"/user_theme.less", css, function(err) {
console.log("WRITING FILE");
if (err) {
console.log("ERROR WHEN WRITING", err);
}
});
}
});
}