最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Gatsby构建期间检索文件内容

IT培训 admin 5浏览 0评论

Gatsby构建期间检索文件内容

我需要提取程序源文件的内容,以便在Gatsby生成的页面中显示。我已经整理好一切,可以打电话了

// my-fancy-template.tsx
import { readFileSync } from "fs";
// ...
const fileContents = readFileSync("./my/relative/file/path.cs");

但是,在运行gatsby developgatsby build时,出现以下错误

找不到此依赖项:⠀* ./src/templates/my-fancy-template.tsx中的fs⠀要安装它,您可以运行:npm install --save fs

但是,all the documentation建议该模块是Node 除非的本机模块,它正在浏览器中运行。我还不太熟悉Node,但是由于gatsby build也失败了(该命令甚至无法启动本地服务器),如果这是问题,我会有些惊讶。

我什至从新的测试站点(gatsby new test)尝试了同样的效果。

回答如下:

我在侧边栏中找到this并给了一个镜头,但似乎[[declared] fs可用;它实际上没有提供fs

然后令我震惊的是,尽管盖茨比在构建时创建了页面,但直到需要它们时,它才可能

render

这些页面。这可能是一个错误的评估,但最终导致了我需要的解决方案:
  1. 您需要在File中的gatsby-source-filesystem期间将文件内容添加到exports.onCreateNode上的字段中(假设您正在使用gatsby-node.js)。您可以通过通常的方式进行此操作:

    if (node.internal.type === `File`) { fs.readFile(node.absolutePath, undefined, (_err, buf) => { createNodeField({ node, name: `contents`, value: buf.toString()}); }); }

  2. 然后您可以在my-fancy-template.tsx内的查询中访问此字段:

    { allFile { nodes { fields { content } } } }

从那里,您可以在fields.content的每个元素内自由使用allFile.nodes。 (这当然也适用于file查询方法。)

自然,如果有人有一个更优雅的解决方案,我会欣喜若狂:-)

Gatsby构建期间检索文件内容

我需要提取程序源文件的内容,以便在Gatsby生成的页面中显示。我已经整理好一切,可以打电话了

// my-fancy-template.tsx
import { readFileSync } from "fs";
// ...
const fileContents = readFileSync("./my/relative/file/path.cs");

但是,在运行gatsby developgatsby build时,出现以下错误

找不到此依赖项:⠀* ./src/templates/my-fancy-template.tsx中的fs⠀要安装它,您可以运行:npm install --save fs

但是,all the documentation建议该模块是Node 除非的本机模块,它正在浏览器中运行。我还不太熟悉Node,但是由于gatsby build也失败了(该命令甚至无法启动本地服务器),如果这是问题,我会有些惊讶。

我什至从新的测试站点(gatsby new test)尝试了同样的效果。

回答如下:

我在侧边栏中找到this并给了一个镜头,但似乎[[declared] fs可用;它实际上没有提供fs

然后令我震惊的是,尽管盖茨比在构建时创建了页面,但直到需要它们时,它才可能

render

这些页面。这可能是一个错误的评估,但最终导致了我需要的解决方案:
  1. 您需要在File中的gatsby-source-filesystem期间将文件内容添加到exports.onCreateNode上的字段中(假设您正在使用gatsby-node.js)。您可以通过通常的方式进行此操作:

    if (node.internal.type === `File`) { fs.readFile(node.absolutePath, undefined, (_err, buf) => { createNodeField({ node, name: `contents`, value: buf.toString()}); }); }

  2. 然后您可以在my-fancy-template.tsx内的查询中访问此字段:

    { allFile { nodes { fields { content } } } }

从那里,您可以在fields.content的每个元素内自由使用allFile.nodes。 (这当然也适用于file查询方法。)

自然,如果有人有一个更优雅的解决方案,我会欣喜若狂:-)

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论