我正在尝试将文件系统变成导航。我正在使用babel-plugin-preval递归遍历目录并像这样获取文件:
const getFilePaths = () => {
const filepaths = preval`
const fs = require('fs')
const path = require('path')
const getAllFiles = dir =>
fs.readdirSync(dir).reduce((files, file) => {
const name = path.join(dir, file);
const isDirectory = fs.statSync(name).isDirectory();
return isDirectory ? [...files, ...getAllFiles(name)] : [...files, name];
}, [])
module.exports = getAllFiles('./pages/learn')
`
return Promise.resolve(filepaths)
}
然后,我将这些结果输入一个函数,该函数试图要求从该文件路径导出const meta = {}。
export const buildLearnNode = filepath => {
const node = buildIds(filepath)
const fullFilePath = `../${filepath}`
const {meta} = require(fullFilePath)
return Object.assign({}, node, {
title: meta.title || null
})
}
如果我在require语句中对文件路径进行硬编码,那么它将起作用。如果我以任何方式使用从preval返回的filepath变量,都会遇到类似这样的失败:
错误:找不到模块'../ pages / learn / hvac / begin / how-to-fix-a-sink / step-1.mdx'
我发现了this的Github问题,表明这可能是Webpack的事情,并且说要确保它仅限于已知路径。我已经手动添加了文件路径前缀,甚至将文件扩展名砍掉并手动添加了它们,但是没有任何效果。我的患病风险一触即发,要求就中断了。