设置静态File节点的publicURL,或者在Gatsby中创建一个重复的文件节点



我正在使用Gatsby JS创建一个静态站点。该网站正在使用gatsby-source-filesystem插件从文本文件动态构建。我的配置如下:

{
resolve: `gatsby-source-filesystem`,
options: {
name: `Wrappers`,
path: `${__dirname}/ToolWrappers`,
},
},

我的要求是为我的一些静态源文件有稳定的,系统的url。默认情况下,它们被分配一个publicURL,如/static/e97a5c9f35ab32ea270703045bec732d/bwa_aln.cwl,但我需要在/packages/bwa/0.7.17/bwa_aln/bwa_aln.cwl上访问它。换句话说,我需要定制这些File节点的publicURL

我的第一次尝试是在/packages/bwa/0.7.17/bwa_aln/bwa_aln.cwl创建一个新的React页面,它重定向到静态URL,但这是不够的,因为我需要它作为一个返回原始文本数据的API,而不是HTML。

其次,我尝试在gatsby-node.js中使用此代码修改File节点的url:

exports.onCreateNode = ({ node, actions }) => {
const { createNode, createNodeField } = actions
if (node.internal.type === 'File'){
const fields = filenameAttributes(node.relativePath)
createNodeField({node, name: 'publicURL', value: fields.wrapperUrl})
}
}

然而,这似乎并没有真正"坚持"下去。当我在graphQL浏览器中查询publicURL时,它保持不变,并且实际文本文件的URL不受影响。

我怎样才能修改这些文件的publicURL,或者用自定义URL复制这些文件?

您是否尝试过创建像/static/packages/bwa/0.7.17/bwa_aln/{fileName.extension}这样的文件夹结构?

Gatsby在默认情况下,当构建站点时,将把静态文件夹的内部结构克隆到/public文件夹,使资产在localhost:8000/packages/bwa/0.7.17/bwa_aln/{fileName.extension}处可用(将资产名称更改为{fileName.extension})。

请注意,我的源文本文件不在静态文件夹中。它们位于不同的地方(${__dirname}/ToolWrappers)和使用gatsby-source-filesystem导入到Gatsby。我不无论如何都要控制这个文件夹结构。所以这没有用这里。

在这种情况下,这个插件可能会有用:gatsby-plugin-copy-files:

{
resolve: 'gatsby-plugin-copy-files',
options: {
source: `${__dirname}/ToolWrappers`,
destination: '/static'
}
},

相关内容

  • 没有找到相关文章

最新更新