【问题标题】:Is it possible to get HTML and CSS output from React with Node.js?是否可以使用 Node.js 从 React 获取 HTML 和 CSS 输出?
【发布时间】:2021-01-02 15:55:29
【问题描述】:

我不确定这是否有意义,我想我会看到的!

基本上,假设我有一个 React 组件。我还使用 Styled Components 对其进行了样式设置。现在,我想看看结果。问题是,我在Node.js 中运行它。我最好希望以静态网页的字符串/文件的形式接收输出,即 HTML 和 CSS。

以 React Native 为例 - 它采用具有样式化组件的 React 代码,并将其呈现给 Android、iOS 和(静态)网络。我希望能够将这些 React 内容渲染为静态文件。

认为我需要一个 React 解析器,或者类似的东西。自定义实现很好。

这甚至可能吗?我会在这里过头吗?还是答案比我想象的简单?

【问题讨论】:

  • 您的 React 应用程序最初是使用 create-react-app 创建的吗?
  • 我不确定是否完全理解,但我会尽力回答您,您可以进行 SSR(服务器端渲染)并将 html/css 作为文本发送到您的客户端。您还可以进行预渲染,在我认为从未使用过的静态文件中生成应用程序的 html/css,但我认为这可以帮助您:npmjs.com/package/react-snapshot
  • 我从未使用过 styled-components 但您在这里有 Styled-Components 的 SSR 很好的例子:styled-components.com/docs/advanced#server-side-rendering
  • @DimaParzhitsky 不,不是 ;)
  • @Berthy 尝试了 react-snapshot,不起作用 - 按照 npm 页面的说明进行操作后,出现错误:ReferenceError: navigator is not defined: 我认为这是因为设置未打开服务器,并且正在使用节点。现在将尝试 SSR!

标签: javascript node.js reactjs react-native node-modules


【解决方案1】:

如果我对您的理解正确,using webpack as a node module 可能会对您的情况有所帮助。您只需将编译器的输出重定向到虚拟(模拟)文件系统(或者您可以使用真正的 FS,如果这不是问题),然后访问它以获取文件内容:

来自 Webpack 文档:

const { createFsFromVolume, Volume } = require('memfs');
const webpack = require('webpack');

const fs = createFsFromVolume(new Volume());
const compiler = webpack({ /* configuration */ });

compiler.outputFileSystem = fs;
compiler.run((err, stats) => {
  // Read the output later:
  const content = fs.readFileSync(/* output path */);
});

【讨论】:

  • 嗨,我仍然不确定这是否是我想要的。如果我有一个导入 React 并返回一个新 React 组件的文件,这是否能够为我提供该 React 组件的静态文件?干杯!
  • React 本身不会产生 *.{html,js,css} 文件,它是一个 JS-only 库;资产文件实际上是由 Webpack 创建的。对于您的任务,您必须将每个组件视为单独的 React 应用程序(只有一个组件),并(使用 Webpack)将每个应用程序编译为与浏览器兼容的资产。
  • 好吧,可以理解!所以只是仔细检查一下,如果我有 React 代码,并且使用 Styled Components,通过它运行它会输出静态文件吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-12-16
  • 2011-06-13
  • 2011-03-29
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多