问题 如何使用语义UI将生成的工件与主构建分开?


我试图弄清楚如何将语义UI与我的基于gulp的前端工具链集成。

npm工件 semantic-ui 包括将编写的交互式安装程序 semantic.json 将文件发送到我的项目的根目录,并将较少的文件,gulp任务和一些配置安装到我的项目中。所有这些文件都将放在semantic.json中指定的单个基目录的子目录中。

我不希望我的项目的git存储库中有任何依赖项实现文件或任何生成的文件,因为这会污染修订历史记录并导致不必要的合并冲突。我非常愿意提供 semantic.json 只有和 .gitignore 语义基目录。上 npm install,语义安装程序应该将所有内容安装到指定的基本目录中 semantic.json。在构建时,我希望生成的工件进入一个单独的dist目录,该目录不在语义基目录下。

但是,如果我这样做,安装程序将失败,并显示一条消息,指出它无法找到要更新的目录,而是将我放入交互式安装程序中。这不是我想要的,因为这意味着我的构建不再是非交互式的(这会导致CI构建失败)。

如何将Semantic UI集成到我的构建中,而无需将Semantic及其生成的工件提交到我的git存储库中?


11670
2017-08-03 16:53


起源

如果您没有以任何方式修改语义UI(即添加主题或更改变量/覆盖)并且只是下载和构建,那么为什么还要使用其构建系统呢?为什么不使用Bower的构建? - fstanis
这就是我最终要做的事情,但将来需要主题。所以这个问题仍然有效。 - Jannik Jochem


答案:


这就是我们在类似场景中所做的。以下是真实的:

  • 语义UI生成的所有内容都在 的.gitignore。因此,我们在repo中拥有的唯一语义UI文件是:
    • semantic.json
    • 语义/ src目录 文件夹(这是我们的主题修改实际上是)
    • 语义/任务 文件夹(可能不需要在git上,但由于它需要构建,如果我们将它保存在我们的仓库中,一切都会更简单)
  • 我们永远不需要(重新)运行Semantic UI安装程序,所有内容都集成在我们自己的中 gulpfile.js
  • 我们的语义UI输出 资产 与其源不在同一文件夹中的文件夹。
  • 语义UI根据我的规则使用npm自动更新 的package.json

以下是实现此目标所需的步骤:

  1. 安装语义UI。通过这个我假设您使用npm或从git克隆它(使用npm是 高度 推荐),无论哪种方式,你都有 semantic.json 在你的项目的主文件夹和一个 语义 文件夹 gulpfile.jsSRC 和 任务

  2. 确保可以构建语义UI。导航 语义/ 并运行 gulp build。这应该创造一个 DIST 你的文件夹 语义/ 目录。删除它并删除语义UI gulpfile.js 因为你不再需要它了。

  3. 编辑 semantic.json。您需要编辑两行:

    1. 更改 "packaged": "dist/", 到您想要输出的路径 semantic.css 和 semantic.js 相对于Semantic UI的文件夹。在我们的例子中,它是 "packaged": "../../assets/semantic/",
    2. 更改 "themes": "dist/themes/" 以同样的方式,自从 主题/ 文件夹包含语义UI使用的字体和图像,因此它需要与文件夹相同 semantic.css。在我们的例子中,它是 "themes": "../../assets/semantic/dist/themes/"
  4. 编辑你的 gulpfile.js 这样它就可以使用Semantic UI的构建任务。加 var semanticBuild = require('./semantic/tasks/build'); (如果 语义/ 与您的文件夹位于同一文件夹中 gulpfile.js例如,然后简单地注册依赖于它的任务 gulp.task('semantic', semanticBuild);

  5. (可选)创建一个 清洁 任务。我们用了 德尔 为了那个原因。

    gulp.task('clean:semantic', function(cb) {
        del(['assets/semantic'], cb);
    });
    

14
2017-08-20 12:13



看起来很有希望,谢谢但是,你确定那些依赖于你的任务 semantic 任务只有在您完成后才能开始 semantic 任务完成?因为gulp脚本用于语义使用 gulp.start(),这意味着gulp无法知道构建何时完成。 - Jannik Jochem
我不是 - 我们将语义作为一项单独的任务,因为它需要很长时间才能构建,因此我们只在需要时才这样做。你也许可以使用 一饮而尽,突突 实现你想要的并实际调用Semantic UI的gulpfile.js,但我不确定这一点。 - fstanis