如何解决:使用babel-plugin-preval生成的动态要求时出现“找不到模块”

时间:2019-08-20 16:03:02

标签: webpack babeljs next.js

我正在尝试将文件系统变成导航。我正在使用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的事情,并且说要确保它仅限于已知路径。我已经手动添加了文件路径前缀,甚至将文件扩展名砍掉并手动添加了它们,但是没有任何效果。我的患病风险一触即发,要求就中断了。

0 个答案:

没有答案