将Semantic UI LESS only Distribution 与Phoenix 应用程序集成非常简单,需要一点技巧。我建议你使用 Webpack 而不是 brunch/gulp,因为它相对流行,有很多插件并且易于配置。
在开始该过程之前,预计 Phoenix 应用程序已安装默认的早午餐构建工具并且它正在工作。
集成 Webpack
请按照我的语义 UI 和 Webpack 集成详细指南进行详细的分步操作。这个答案参考了这篇文章。
链接:How to Integrate Your Phoenix Application with Semantic UI and Webpack
集成语义用户界面
在我们安装 Semantic UI 之前,我们需要进行一些配置。我们将创建一个新的语义修复文件。
vim web/static/lib/semantic-fix.js
将以下内容粘贴到我们刚刚创建的 semantic-fix.js 文件中。该文件将负责将所有语义 UI 资产放置到位,以便在我们的应用程序中使用它
// ----------------------------------------------------
// File: web/static/lib/semantic-fix.js
// ----------------------------------------------------
var fs = require('fs');
// relocate default config
fs.writeFileSync(
'node_modules/semantic-ui-less/theme.config',
"@import '../../src/semantic/theme.config';\n",
'utf8'
);
// fix well known bug with default distribution
fixFontPath('node_modules/semantic-ui-less/themes/default/globals/site.variables');
fixFontPath('node_modules/semantic-ui-less/themes/flat/globals/site.variables');
fixFontPath('node_modules/semantic-ui-less/themes/material/globals/site.variables');
function fixFontPath(filename) {
var content = fs.readFileSync(filename, 'utf8');
var newContent = content.replace(
"@fontPath : '../../themes/",
"@fontPath : '../../../themes/"
);
fs.writeFileSync(filename, newContent, 'utf8');
}
我们将为 Semantic UI 制作一个自定义的 theme.config 文件。因此更改semantic-fix.js文件中的路径位置如下:
// ----------------------------------------------------
// File: web/static/lib/semantic-fix.js
// ----------------------------------------------------
// Old default code
fs.writeFileSync(
'node_modules/semantic-ui-less/theme.config',
"@import '../../src/semantic/theme.config';\n",
'utf8'
);
将其替换为以下代码:
// ----------------------------------------------------
// File: web/static/lib/semantic-fix.js
// ----------------------------------------------------
// Relocate default config
fs.writeFileSync(
'node_modules/semantic-ui-less/theme.config',
"@import '../../web/static/css/theme.config';\n",
'utf8'
);
我最近编写了一个深入的分步教程,将 Semantic UI 框架与基于 Elixir 的 Phoenix 应用程序和 Webpack 集成。
在安装 npm 包时,添加语义修复.js 需要在每个 postinstall 回调上运行。因此,我们将其放置在package.jsonscripts部分下。
// ----------------------------------------------------
// File: package.json
// ----------------------------------------------------
{
...
"scripts": {
...
"postinstall": "node semantic-fix.js",
...
}
...
}
现在是安装 Semantic UI LESS 包的时候了。安装完成后,semantic-fix.js文件会被postinstall脚本调用。
npm install --save semantic-ui-less && node semantic-fix.js
Semantic UI 安装完成后,我们需要将node_modules/semantic-ui-less/theme.config.example 复制到web/static/css/theme.config。
cp node_modules/semantic-ui-less/theme.config.example web/static/css/theme.config
将现有路径覆盖到我们的路径
/* Path to site override folder */
@siteFolder : '../../web/static/css/site';
&
// @import "theme.less";
@import "~semantic-ui-less/theme.less";
将语义 LESS 初始化文件 node_modules/semantic-ui-less/semantic.less 复制到 web/static/css。此文件导入不同的组件样式。
将此文件的导入语句的位置从 @import "definitions/...."' 更改为 @import "~semantic-ui-less/definitions/...."
同样我们需要将semantic.js文件添加到web/static/js文件夹中来导入所有的JavaScript组件,如下:
//---------------------------------------------
// File: web/statis/js/semantic.js
//---------------------------------------------
import 'semantic-ui-less/definitions/globals/site';
import 'semantic-ui-less/definitions/behaviors/api';
import 'semantic-ui-less/definitions/behaviors/colorize';
import 'semantic-ui-less/definitions/behaviors/form';
import 'semantic-ui-less/definitions/behaviors/state';
import 'semantic-ui-less/definitions/behaviors/visibility';
import 'semantic-ui-less/definitions/behaviors/visit';
import 'semantic-ui-less/definitions/modules/accordion';
import 'semantic-ui-less/definitions/modules/checkbox';
import 'semantic-ui-less/definitions/modules/dimmer';
import 'semantic-ui-less/definitions/modules/dropdown';
import 'semantic-ui-less/definitions/modules/embed';
import 'semantic-ui-less/definitions/modules/modal';
import 'semantic-ui-leKaabilss/definitions/modules/nag';
import 'semantic-ui-less/definitions/modules/popup';
import 'semantic-ui-less/definitions/modules/progress';
import 'semantic-ui-less/definitions/modules/rating';
import 'semantic-ui-less/definitions/modules/search';
import 'semantic-ui-less/definitions/modules/shape';
import 'semantic-ui-less/definitions/modules/sidebar';
import 'semantic-ui-less/definitions/modules/sticky';
import 'semantic-ui-less/definitions/modules/tab';
import 'semantic-ui-less/definitions/modules/transition';
import 'semantic-ui-less/definitions/modules/video';
web/static/js/app.js 是我们 webpack 配置中的入口文件。因此,我们需要将包括语义 UI 文件在内的所有文件导入 app.js。在app.js文件末尾添加以下行
//---------------------------------------------
// File: web/statis/js/app.js
//---------------------------------------------
...
...
import "./semantic.js";
import '../css/semantic.less';
集成现已完成并可以运行。 Semantic UI 现在已经与 webpack 完全集成,是时候尝试一下了。从项目根目录运行 Phoenix 服务器mix phoenix.server。它应该触发 webpack 编译所有文件,包括语义 UI - mix phoenix.server
我的文章(链接在顶部)中更详细地记录了此过程,如果有任何混淆,可以参考。
希望对您有所帮助。