使用来自 'path' 的导入路径时无法读取未定义的 属性 'resolve'

Cannot read property 'resolve' of undefined when using import path from 'path'

使用时:

import path from 'path';

path.resolve('/')

我得到标题错误,但是当我使用

require('path').resolve('messages.json'))

import { readFile, writeFile } from 'fs/promises';
import { v4 as uuidv4 } from 'uuid';
import path from 'path';

interface MessagesJson {
  messages: Array<{ content: string; id: string }>;
}

export class MessagesRepository {
  async findOne(id: string): Promise<string> {
    return id;
  }

  async findAll(): Promise<any> {
    return null;
  }

  async create(message: any): Promise<any> {
    console.log(' dirname', require('path').resolve('messages.json'));
    console.log(' path.resolve', path.resolve('/'));
    // console.log(' path.resolve', path.resolve(__dirname, '/src'));
    const messages: any = await readFile('src/messages.json', 'utf-8');

    const parsedMessages: MessagesJson = JSON.parse(messages);

    const newMessage = {
      content: message,
      id: uuidv4(),
    };

    await parsedMessages.messages.push(newMessage);

    await writeFile('src/messages.json', JSON.stringify(parsedMessages));

    return parsedMessages;
  }
}

对于问题上下文,我正在使用 nestjs 开发一个小项目,path.foo() 的任何选项都会得到与上面列出的相同的错误,是否与代码编译后相关?

我非常迷失 where/what 文档 and/or 我应该阅读的信息才能理解正在发生的事情。

require 从技术上讲,它本身就是一个命名导入。这意味着在 Typescript 中它需要像 import * as path from 'path' 这样你才能使用 path.resolve。另一种选择是使用 import { resolve } from 'path'; 解构导入,现在您可以直接调用 resolve()