mhsdesign/proposal-neos-ui-esm-plugin-loader

此包已被废弃,不再维护。未建议替代包。

允许在 Neos.Ui 中加载 ES-Module 插件

1.0.0 2022-09-07 09:29 UTC

This package is auto-updated.

Last update: 2023-12-07 12:10:36 UTC


README

通过允许 <src type="module" /> 加载 ES-Module 插件,在 Neos.Ui 中实现完全兼容

使用 Esbuild 的 ESM Neos Ui 插件构建器

Neos.Ui 中存在的问题

neos/neos-ui#3097

使用方法

Neos.Neos.Ui.resources.javascript 和样式表可以使用建议的 attributes 数组。

Neos:
  Neos:
    Ui:
      resources:
        javascript:
          'My.Cool:Plugin':
            resource: 'resource://My.Cool/Public/NeosUserInterface/Plugin.js'
            # legacy first level attribute 'defer'
            # defer: true

            # NEW Attributes!
            attributes:
              type: "module"
              defer: true
              any: "thing"

        stylesheets:
          'My.Cool:Plugin':
            # NEW Attributes!
            attributes:
              any: "thing"

安装

composer require mhsdesign/proposal-neos-ui-esm-plugin-loader

实现

Neos.Ui 使用了一个 StyleAndJavascriptInclusionService,它读取 Neos.Neos.Ui.resources.javascript 并从中构建 html <src> 标签。

现在,在 Objects.yaml 中替换了此服务的一个版本,允许添加额外的属性。

(第 100 行)

- $defer = key_exists('defer', $element) && $element['defer'] ? 'defer ' : '';
- $result .= $builderForLine($finalUri, $defer);
+ $additionalAttributes = array_merge(
+     // legacy first level 'defer' attribute
+     isset($element['defer']) ? ['defer' => $element['defer']] : [],
+     $element['attributes'] ?? []
+ );
+ $result .= $builderForLine($finalUri, $this->htmlAttributesArrayToString($additionalAttributes));