从子目录导入模块时出错

问题描述 投票:0回答:1

当我尝试导入子目录中的模块时,出现错误 [ERR_INVALID_MODULE_SPECIFIER]

主要代码:

const triggers = [];
await getFiles("./triggers", triggers)
triggers.map((f) => {
    return {
        name: f.replace(".js", ""),
        module: import(`${f}`)
    }
})

获取文件代码:

export async function getFiles(dir, array){
    
    fs.readdirSync(dir).map(f => {
        const absl = (path.join(dir, f))
        if(fs.statSync(absl).isDirectory()) return getFiles(absl, array)
        else return array.push(absl);
    })

}

有什么数组:

[
  'triggers\\actions\\btn-main-menu.js',
  'triggers\\actions\\btn-my-cabinet-change-email.js',
  'triggers\\actions\\btn-my-cabinet-change-password.js',
  'triggers\\actions\\btn-service-update-information.js',
  'triggers\\actions\\btn-service.js',
  'triggers\\actions\\btn-start-commands.js',
  'triggers\\actions\\btn-start-my-cabinet.js',
  'triggers\\actions\\btn-start-my-services.js',
  'triggers\\commands\\start.js'
]

错误代码:

Invalid module "triggers\actions\btn-main-menu.js" is not a valid package name imported from C:\Users\Fess\Desktop\workSpace\pterodactyl\app.js

改变路径, 将

module: import(${f})
更改为
module: import(
。/${f}
)
将正斜杠替换为反斜杠

node.js module
1个回答
0
投票

文件系统中的相对模块需要使用明确指示的路径(例如,前导

.
..
,然后是路径分隔符)。

如果不这样做,您就是在要求 Node 加载真实模块的子导出。例如。

triggers\actions\btn-main-menu.js
将尝试从
actions\btn-main-menu.js
模块加载
triggers
导出。

或者,通过使用解析函数来使用绝对路径:

const absl = path.resolve(path.join(...))
(现在,即使您的变量声明它是绝对位置,但这根本不是)。

© www.soinside.com 2019 - 2024. All rights reserved.