我可以在 React App 中访问带有由 MiniCssExtractPlugin 创建的内容哈希的 css 文件名吗?

发布于 2025-01-13 10:12:44 字数 892 浏览 1 评论 0原文

我正在尝试使用 Shadow dom 在 React 组件内动态加载链接标签,但我找不到使用 MiniCssExtractPlugin/Webpack 生成的哈希值访问文件名/路径的解决方案。

总体思路是有两个以上的 CSS 输出。第一个全局的和其他的用于“shadow dom”隔离。

我已经尝试使用文件名设置环境变量,但它似乎是异步操作。我的环境 REACT_APP_CSS 未定义。

// as example
      new MiniCssExtractPlugin({
        filename: ({ chunk }) => {
          // REACT_APP_CSS it is some global variable
          REACT_APP_CSS = `${chunk.name}.${chunk.hash}.css`;
          return `${assetName}.css`;
        }
      }),
    new webpack.DefinePlugin({
        "process.env": JSON.stringify({
          REACT_APP_CSS: REACT_APP_CSS
        })
      }),

您知道我可以做什么来在运行时访问文件名/路径吗?任何同步解决方案都会很棒。

示例组件

import root from "react-shadow";
[..]
  return (
  <root.span>
      <link href={myCssPathToBuild} rel="stylesheet" />
    [..]
  </root.span>
)

希望您能有所帮助。

I am trying to load dynamically link tag inside a React component with shadow dom, but I can't find a solution to access filename/path with hashes generated by MiniCssExtractPlugin/Webpack.

General idea is to have two+ CSS outputs. First global one and the others for "shadow dom" isolation.

I've already tried to set env variable with filename, but it seems to be async action. My env REACT_APP_CSS is undefined.

// as example
      new MiniCssExtractPlugin({
        filename: ({ chunk }) => {
          // REACT_APP_CSS it is some global variable
          REACT_APP_CSS = `${chunk.name}.${chunk.hash}.css`;
          return `${assetName}.css`;
        }
      }),
    new webpack.DefinePlugin({
        "process.env": JSON.stringify({
          REACT_APP_CSS: REACT_APP_CSS
        })
      }),

Do you happen to know what can I do to access filenames/paths in runtime? Any synchronous solution would be great.

Example component

import root from "react-shadow";
[..]
  return (
  <root.span>
      <link href={myCssPathToBuild} rel="stylesheet" />
    [..]
  </root.span>
)

Hope you can help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最美不过初阳 2025-01-20 10:12:44

我找到了解决方案。它并不完美,但它“有效”。

要访问块路径,您可以:

使用assets-webpack-plugin

  new AssetsPlugin({
        filename: "assets.js",
        processOutput: function (assets) {
          return "window.staticMap = " + JSON.stringify(assets);
        }
      }),

它创建一个包含块名称和路径对的映射/对象。使用 AssetPlugin,您可以使用 ext 指定输出和文件名。在给定的示例中,我创建了 js 文件,该文件设置包含资产映射的全局变量。

为了在运行时访问 window.staticMap,我在公共 HTML 中包含了

以我的愚见,访问块路径应该容易得多。
如果您有其他/更好的解决方案,请分享。

I found a solution. It isn't perfect, but it "works".

To access chunks paths you can:

Use assets-webpack-plugin

  new AssetsPlugin({
        filename: "assets.js",
        processOutput: function (assets) {
          return "window.staticMap = " + JSON.stringify(assets);
        }
      }),

It creates a map/object containing pair of chunkName and path. Using AssetPlugin you can specify output and filename with ext. In given example I create js file which set global variable containing asset map.

To access window.staticMap at runtime I included <script src="/assets.js"> in public HTML.

In my humble opinion access to chunks paths should be way much easier.
If you have other/better solution, please share.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文