我正在使用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'
}
},