sgalinski/sgc-core

sgalinski 命令行界面


README

sgalinski Internet Services

sgalinski CLI 任务运行器

请注意: CLI 旨在与 bash 或 zsh 一起使用。

安装

将 'sgc-core' 文件夹移动到您的项目根目录,并执行安装脚本。如果您正在使用 composer,您可以通过运行以下命令安装 sgc:

composer require sgalinski/sgc-core

如果您不想在 vendor 目录中安装 sgc,您可以在主项目的 composer.json 的 extra 部分中定义自己的目录。

"installer-paths": {
  "./sgc-core/": [
    "sgalinski/sgc-core"
  ]
}

然后运行安装程序

./sgc-core/install.sh

本地安装

如果您不想全局安装 sgc 命令(例如在服务器环境中),只需将 --local 标志传递给安装脚本即可。

./sgc-core/install.sh --local

使用 Babel Polyfills [js.pipeline.{prod/dev}.polyfills]

Babel 可以在编译时为您提供一些重要的 Polyfills,用于下一代 JavaScript。为了使此功能正常工作,您需要安装以下软件包到项目的 JavaScript 包中。

转到您存储本地 NPM 依赖项(如 jQuery 和其他库)的文件夹,并执行以下命令

npm install @babel/polyfill

激活

如果您购买了 SGC 许可证,您将获得一个密钥,您需要在 .sgc-config.json 文件中设置此密钥。只需在文件底部添加一个名为 "license" 的新字段并保存您的密钥即可。

Windows

请注意:虽然在理论上可以在 Windows 上运行 sgc,但此选项既未经过充分测试,也未以任何方式宣传。随着 Windows Bash 的出现,情况可能有所改善,但到目前为止,我们还没有能力为 Windows 活跃地提供稳定的版本。如果您认为您可以提供帮助,请不要犹豫,与我们联系

如果您想在 Windows 机器上安装 SGC,则需要做一些额外的准备

  • 所有命令都应在 git-bash 窗口中执行,不要尝试使用 cmd!如果您正在使用 git for Windows,您可能已经安装了 git-bash。
  • 为 Windows 安装 NVM:https://github.com/coreybutler/nvm-windows
  • 您必须以管理员权限打开 git-bash 来运行安装脚本

SGC 发布版本

请注意,在发布新版本之前必须执行以下步骤

  • 在以下文件中提高版本号(根据 SEMVER)
  • composer.json
  • package.json
  • core/version.conf
  • 使用新版本号添加 git 标签

可用命令

  • sgc:加载浏览器同步实例,并监听文件更改(触发 CSS 和 JS 编译)
    • sgc -s:加载浏览器同步实例,但防止它自动在浏览器中打开
    • sgc -q:加载浏览器同步实例,但禁用桌面通知
    • sgc -d domain.dev:使用指定的 dev-domain 启动浏览器同步实例(必须在 .sgc-config.json 中配置)
  • sgc css:运行 CSS QA 任务(代码检查)并编译所有 CSS 文件
  • sgc js:运行 JS QA 任务(代码检查)并编译所有 JS/TS 文件
  • sgc lint:运行 JS 和 Sass 文件的 Linter
    • sgc lint:js:运行 JS 文件的 Linter
    • sgc lint:css:运行 Sass 文件的 Linter
  • sgc sassMigrater:将 Libsass 文件迁移到 Dart Sass
  • sgc releaseExtension --ext {extension name}:启动一个问卷,帮助根据 SEMVER 更新扩展(更新 composer.json 和 ext_emconf.php)
  • sgc 图片:在您在 .sgc-config.json 目录部分指定的文件夹中的所有图片上运行图像优化器
  • sgc 图片:上传:在您在 .sgc-config.json 中 images.optimize 部分指定的文件夹中的所有图片上运行图像优化器
  • sgc 打开 {站点}:在默认浏览器中打开您在 .sgc-config.json 中定义的一组 URL
  • sgc sizeGuard:检查文件大小是否超过 .sgc-config.json 中定义的阈值
    • sgc sizeGuard:接受:接受所有更改
    • sgc sizeGuard:接受 {文件名}:接受文件大小的增加
    • sgc sizeGuard:清除:删除并创建一个新的 sizeGuard 文件
    • sgc sizeGuard:检查:如果不存在,则创建一个新的 sizeGuard 文件

您可以使用 `--production` 标志调用每个命令。这将阻止工具链生成 SourceMaps,并且不会应用来自代码检查工具的修复。

配置

要配置前端构建过程以满足您的需求,您必须修改安装程序将放入您项目根目录中的 .sgc-config.json。

注意 在 SGC 1.2.0 之前,配置文件名为 config.json,位于 sgc-core/gulp 文件夹中。如果此文件仍然存在,sgc 将使用它而不是 .sgc-config.json。强烈建议使用 .sgc-config.json!

目录

包含 css、sass、javascript、images、sourcemaps 和 inline-svgs 的路径,相对于扩展根目录。

  • webPath: 从网页中看到您的扩展文件夹的路径
  • basePath: 从文件系统中看到您的扩展文件夹的路径

abovethefold

关键路径 css 的配置。

  • template: src 模板的路径
  • dest: 目标路径

js

SGC 将通过将其转换为符合 ECMAScript 6 规范的代码,支持您编写下一代 JavaScript 并在今天的浏览器中执行它。目前支持 ECMAScript 2021 语法和 TypeScript。

  • compiler: es2021|typescript
  • libraryPaths: 解析 CommonJS require 语句时应搜索的附加位置
  • excludeFromQa: 不需要进行代码检查的 JavaScript 的位置的全局模式
  • watcherEntryPoint: 当在 watchExtensions 中设置扩展更改时的编译入口点。示例:vendor/sgalinski/project-theme/Resources/Public/JavaScript/main.js

css

  • watcherEntryPoint: 当在 watchExtensions 中设置扩展更改时的编译入口点。示例:vendor/sgalinski/project-theme/Resources/Public/Sass/main.scss

images

  • optimize: 应优化用户上传的图像的位置

扩展

应包含在监视和构建任务中的扩展列表。请注意,此列表中的第一个扩展预期为您的 project_theme。

watchExtensions

当监视器运行时,触发主监视入口点的编译而不是扩展代码本身的扩展。仅在设置 watcherEntryPoint 时激活,如上所述。不影响构建过程。

示例

watchExtensions: [
    'project-theme',
    'project-base',
    'sg-account',
    'sg-teaser',
    'sg-forms',
    'sg-jobs',
    'sg-youtube',
    'sg-vimeo',
    'project-theme-megamenu',
    'sg-news',
    'sg-comments',
    'df-tabs'
]

browsersync

BrowserSync 是一个很棒的工具,它将在开发和测试过程中帮助您。当您运行 sgc 时,它将启动一个小型 Web 服务器,该服务器代理您在 .sgc-config.json 中指定的 URL。如果您更改监视列表(如上选项所示)中的扩展中的 JavaScript 或 Sass 文件,BrowserSync 将自动重新加载页面或将更改直接注入浏览器。您还可以在不同的浏览器窗口中打开 BrowserSync URL 的多个实例,BS 将负责在它们之间同步所有输入和滚动事件。

如果您在使用CSP时遇到错误,您必须在CSP头中的script-src部分添加nonce"nonce-browser-sync"。当您的实例不使用nonce时,可以通过添加带有值为truedisableNonce选项来禁用sgc的nonce特定行为。

SizeGuard

SizeGuard是一个纯视觉工具,用于通知您文件大小的更改。您可以通过sgc-config.json更改css和js更改的阈值。阈值必须以字节为单位定义。

{
    "sizeGuard": {
        "css": {
            "maxIncrease": 100
        },
        "js": {
            "maxIncrease": 500
        }
    }
}

要在控制台中禁用通知,请将以下配置添加到sgc-config.json中。

{
    "sizeGuard": {
        "enabled": false
    }
}

用法

您可以在特定组件上运行特定任务,或启动一个监视器,该监视器将在源文件更改时启动BrowserSync并运行任务。要监视的扩展名在项目的.sgc-config.json文件中定义。

如果您运行特定任务,您需要使用--ext参数指定任务要运行的扩展名。

sgc css --ext project_base

有几个可用的任务需要记住

默认/监视任务

sgc

启动一个全局监视器,当您更改任何.scss或.js文件时,将触发css/javascript任务,并在浏览器中打开网站,作为一个browsersync会话(重新编译时,更改的js和css将自动注入)。)

提示:如果您已经在浏览器中打开了browsersync实例,您可以通过传递参数-s来重新启动会话而无需打开浏览器。

要使扩展内的更改触发重新编译,请将它们添加到配置文件中的watchExtensions数组。

css:svg任务(将由css任务自动调用)

sgc css:svg --ext [extension name]

触发在给定目录内所有SVG的Sass-mixins的生成。每个mixin将启用使用相关SVG作为css背景图像。

@import 'svg'; // imports the file with the generated mixins (inside your Sass-root)

.icon-globe {
    @include inline-svg($icon-globe); // inserts the file icon-globe.svg as an inlined background-image
}

css:abovethefold(将由css任务自动调用)

svg css:abovethefold

此任务将读取您指定的abovethefold.template的html文件,读取其中的每个语句,并将其替换为引用文件包含的css样式,作为一个内联样式标签。要使用此功能,您应该在项目中创建一个单独的css文件(abovethefold.scss -> abovethefold.css),以及一个引用此样式表的html模板文件(注意,路径必须相对于模板文件)。然后,您可以将此模板文件设置为您的PageRenderTemplate。现在,您的abovethefold.css文件中的所有样式都将直接内联到您网站的HTML中。请注意,您应该只将此文件中的样式考虑在内,这些样式应在渲染过程之后在每个页面上直接可用。

css任务

sgc css --ext [extension name]

在给定目录内触发css编译。注意,在启动此任务之前,此任务还将运行sprite任务。

假设

  • 所有scss文件都在相对于给定路径的sass目录中。
  • 所有css文件都放入相对于给定路径的stylesheets目录中。

images任务

sgc images --ext [extension name]

优化给定路径的所有图像。

假设

  • 所有图像都在相对于给定路径的image目录中。

优化fileadmin和uploads中的图像

sgc images:uploaded

此任务优化sgc-config.json文件中指定的文件夹内的所有图像(png、jpg、gif、svg)。您可能希望定期运行此任务以压缩用户上传的媒体。

通过您自己的模块扩展sgc

您可以通过编写自己的模块轻松扩展sgc功能。只需在sgc-core旁边创建一个sgc-scripts文件夹,并将您的自定义脚本放在那里。目前仅支持shell脚本,其他语言可能在将来支持。

通过调用sgc来执行您的自定义脚本

+ sgc-core
+ sgc-scripts
    - updateInstance.sh
    - updateDeployData.sh
sgc updateInstance

故障排除

自动完成不起作用

为了使自动完成功能正常工作,您的shell需要了解SGC自动完成文件的位置。根据您的操作系统,您可以在以下位置找到它:/etc/bash_completion.d/sgc(Linux),或者/usr/local/etc/bash_completion.d/sgc(macOS)。通常,您的shell会自动读取此文件。如果自动完成功能仍然无法正常工作,很可能是因为某种原因它没有读取。要修复它,您可以将它简单地包含到您的.bashrc文件中

source /usr/local/etc/bash_completion.d/sgc
[or]
source /etc/bash_completion.d/sgc

我已经将代码添加到我的.bashrc文件中,但自动完成功能仍然没有工作

在某些macOS安装中,bash在启动时不会读取.bashrc文件。要修复此问题,您可以在~/.bash_profile文件内部source该文件

source ~/.bashrc

如何配置您的.stylelint规则?

在您的根目录中添加一个名为.stylelintrc的文件,并包含以下内容。您可以根据需要交换规则文件。

{
	"extends": "./sgc-core/stylelint-rules"
}

在使用观察器URL时,TYPO3 Fluid模板文件始终被缓存

如果您在使用观察器时遇到此问题,例如在https://localhost:3000/,请在一个单独的选项卡中登录到TYPO3后端https://localhost:3000/typo3/(可以忽略Invalid referrer for /main错误信息)。

这样,sgc-config.json中设置的URL参数实际上应该可以正常工作

示例

    "browsersync": {
        "url": "<your-dev-domain>",
        "urlparams": "no_cache=1&disableScriptmerger=1"
    },

这意味着您可以通过运行https://localhost:3000/并查看<your-dev-domain>?no_cache=1&disableScriptmerger=1的结果。