【问题标题】:How to add Semantic-UI to Phoenix如何将 Semantic-UI 添加到 Phoenix
【发布时间】:2016-07-24 16:30:27
【问题描述】:

如何将 Semantic-UI 添加到 Phoenix?

Semantic-UI 安装在一个文件夹中并使用 NPM 进行更新,实际的 CSS 和 Javascript 文件是使用 GULP 构建的。完整的安装文件夹应该放在哪里?

能否像其他依赖一样通过 Mix 自动更新?

生成的css和javascript应该放在project/web/static/css(或/js)还是/vendor?

如何设置 Gulp/Sematic-UI 配置以自动将文件放在正确的位置?

再一次,Mix 可以自动运行 Gulp/Semantic-UI 构建吗?

【问题讨论】:

    标签: semantic-ui elixir


    【解决方案1】:

    完整的安装文件夹应该放在哪里?

    其实你只需要2个文件:semantic.js & semantic.css。 如果你做了npm install --save semantic-ui,你应该在./semantic/dist/找到它们

    那么,这两个文件应该放在哪里呢? 这取决于...您是 brunch 还是 webpack?与 phoenix 应用程序相关的是在 endpoint.ex 中看到 ./priv/static 文件夹中的静态文件(css、js、字体、img...) Plug.Static。 Phoenix 不知道您在运行 brunch、webpack 或/和 gulp 之前放置这些文件的目录。

    能不能通过Mix自动更新...

    ,在package.json中添加脚本,修改config/dev.exs中的watchers

    生成的css和javascript应该放在project/web/static/css(或/js)还是/vendor?

    同样的答案,你是 brunch 还是 webpack? 与 phoenix 应用程序相关的是在 ./priv/static 文件夹中找到静态文件(css、js、字体、img...),如您在 中所见端点.ex Plug.Static。 Phoenix 不知道您在运行 brunch、webpack 或/和 gulp 之前放置这些文件的目录。

    如何设置 Gulp/Sematic-UI 配置以自动将文件放在正确的位置?

    查看文件 ./semantic.json 以设置 gulp build 命令的输出。

    Mix 可以自动运行 Gulp/Semantic-UI 构建吗?

    ,在package.json中添加脚本,修改config/dev.exs中的watchers

    这并不容易,我建议你首先开始使用npm semantic-ui-css,当你的构建运行良好时切换到npm semantic-ui

    【讨论】:

    • 谢谢,这样更清楚了。我正在使用早午餐。据我了解,Brunch 会将 web/static 子目录中的所有 .js 和 .css 文件放到两个文件中(priv/static/js/app.js 和 css/app.css)。但是,它将以不同的方式处理 /vendor 目录文件(我相信与命名空间有关)。那么,semantic.js 和 .css 应该进入 web/static/css (/js) 还是 /vendor 目录?另外,是否可以让 Gulp 将输出直接放在 web/static 目录中(看起来它必须放在基本 Semantic 目录的子目录中)?
    • @PaulB 我做了一个video 来向你展示如何用早午餐来做到这一点。这是我的第一个视频......所以这不是质量视频,但我希望它仍然可以帮助你
    【解决方案2】:

    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

    我的文章(链接在顶部)中更详细地记录了此过程,如果有任何混淆,可以参考。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      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

      我的文章(链接在顶部)中更详细地记录了此过程,如果有任何混淆,可以参考。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2019-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-07
        • 2018-07-21
        • 1970-01-01
        • 2018-01-24
        • 2016-03-31
        相关资源
        最近更新 更多