使用“路径”中的导入路径时无法读取未定义的属性“解析”

KAM*_*KAM 6 node.js typescript nestjs

使用时:

import path from 'path';

path.resolve('/')
Run Code Online (Sandbox Code Playgroud)

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

require('path').resolve('messages.json'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

我非常不知道我应该阅读哪里/什么文档和/或信息才能理解正在发生的事情。

Jay*_*iel 13

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