多租户和语义 UI
Multi-tenancy and Semantic UI
我正在寻找一种在我的 Laravel 应用程序中使用多个 SUI 主题的方法,每个租户(网站)一个主题。我将语义 UI(semantic-ui-less
存储库)安装为 node_module。
不知何故,我需要多个 theme.config
文件才能指向不同的 site
文件夹以覆盖默认主题。同样,每个租户一个。然后我可以使用 Gulp 为特定租户构建主题。覆盖每个 gulp 构建的 theme.config
文件也是一个选项,但我不知道如何解决这个问题。
我能想到的另一个选择是为每个租户设置多个 composer.json 文件。但我认为这对于主题化来说太过分了,它可能会导致碰撞问题。
除了 this 个未回答的问题外,在 Internet 上找不到任何内容。我希望有人能帮助我!
我想出了一个非常酷的解决方案,它替换了 theme.config 中的 siteFolder
变量以指向正确的目录。之后我就可以编译less文件了。
Gulpfile.js
var Elixir = require('laravel-elixir');
var gulp = require('gulp');
var replace = require('gulp-replace');
var rename = require('gulp-rename');
var util = require('gulp-util');
/*
|--------------------------------------------------------------------------
| Tenants
|--------------------------------------------------------------------------
|
| Build Semantic UI individually for each tenant.
|
*/
if (typeof util.env.tenant === 'string') {
var tenant = util.env.tenant;
var tenantPath = 'storage/tenants/' + tenant + '/assets';
var semanticPath = 'node_modules/semantic-ui-less/';
Elixir.extend('theme', function(tenant) {
new Elixir.Task('theme', function() {
/**
* Perform some magic by pointing the @siteFolder variable
* to the current tenant's theme directory in order for each
* tenant to have it's own unique Semantic UI theme.
*/
return gulp.src([semanticPath + 'theme.config.example'])
.pipe(replace("'site'", "'../../" + tenantPath + "/theme'"))
.pipe(rename('theme.config'))
.pipe(gulp.dest(semanticPath));
});
});
Elixir(function(mix) {
mix
.theme(tenant)
.less(semanticPath + '/semantic.less', tenantPath + '/css/semantic.min.css')
.scriptsIn(semanticPath . '/definitions', tenantPath + '/js/semantic.min.js')
.copy(semanticPath + '/themes/default/assets', tenantPath + '/css/themes/default');
});
}
用法
gulp --tenant {name}
我正在寻找一种在我的 Laravel 应用程序中使用多个 SUI 主题的方法,每个租户(网站)一个主题。我将语义 UI(semantic-ui-less
存储库)安装为 node_module。
不知何故,我需要多个 theme.config
文件才能指向不同的 site
文件夹以覆盖默认主题。同样,每个租户一个。然后我可以使用 Gulp 为特定租户构建主题。覆盖每个 gulp 构建的 theme.config
文件也是一个选项,但我不知道如何解决这个问题。
我能想到的另一个选择是为每个租户设置多个 composer.json 文件。但我认为这对于主题化来说太过分了,它可能会导致碰撞问题。
除了 this 个未回答的问题外,在 Internet 上找不到任何内容。我希望有人能帮助我!
我想出了一个非常酷的解决方案,它替换了 theme.config 中的 siteFolder
变量以指向正确的目录。之后我就可以编译less文件了。
Gulpfile.js
var Elixir = require('laravel-elixir');
var gulp = require('gulp');
var replace = require('gulp-replace');
var rename = require('gulp-rename');
var util = require('gulp-util');
/*
|--------------------------------------------------------------------------
| Tenants
|--------------------------------------------------------------------------
|
| Build Semantic UI individually for each tenant.
|
*/
if (typeof util.env.tenant === 'string') {
var tenant = util.env.tenant;
var tenantPath = 'storage/tenants/' + tenant + '/assets';
var semanticPath = 'node_modules/semantic-ui-less/';
Elixir.extend('theme', function(tenant) {
new Elixir.Task('theme', function() {
/**
* Perform some magic by pointing the @siteFolder variable
* to the current tenant's theme directory in order for each
* tenant to have it's own unique Semantic UI theme.
*/
return gulp.src([semanticPath + 'theme.config.example'])
.pipe(replace("'site'", "'../../" + tenantPath + "/theme'"))
.pipe(rename('theme.config'))
.pipe(gulp.dest(semanticPath));
});
});
Elixir(function(mix) {
mix
.theme(tenant)
.less(semanticPath + '/semantic.less', tenantPath + '/css/semantic.min.css')
.scriptsIn(semanticPath . '/definitions', tenantPath + '/js/semantic.min.js')
.copy(semanticPath + '/themes/default/assets', tenantPath + '/css/themes/default');
});
}
用法
gulp --tenant {name}