Node.js Javascript,在同一文件中使用require()和import

Node.js Javascript,在同一文件中使用require()和import,node.js,node-modules,Node.js,Node Modules,我需要在我的文件中使用require(),这样我就可以使用“readline”,但我还需要使用import,这样我就可以使用模块。但当我在模块内部使用require时,它会说require没有定义。代码如下: var r1 = require('readline') import car from './carclass.mjs' var input = "" var questionToAsk = "" const question1 = () => { return new P

我需要在我的文件中使用require(),这样我就可以使用“readline”,但我还需要使用import,这样我就可以使用模块。但当我在模块内部使用require时,它会说require没有定义。代码如下:

var r1 = require('readline')
import car from './carclass.mjs'
var input = ""
var questionToAsk = ""
const question1 = () => {
    return new Promise((resolve, reject) => {
        r1.question(questionToAsk, (answer) => {
            input = answer
            resolve()
        })
        r1.question()
    })
}
const main = async () => {
    console.log("What is the Brand?")
    await question1()
    var brandName = input
    console.log("What is the Model?")
    await question1()
    var modelName = input
    console.log("What is the Speed?")
    await question1()
    var carSpeed = input
    var newCar = new car(brandName,modelName,carSpeed)

    r1.close()
}
main()

如何在模块中使用require()和import,或者是否有其他方法可以实现这一点?

如果您已经在ESM模块文件中,我建议您使用
import
,而不是
require()
,因为
require()
仅存在于CJS模块中,而不是ESM模块中。下面是一个有效的代码示例:

import readline from 'readline';
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question("What's up?\n", data => {
    console.log(`Got your result: ${data}`);
    rl.close();
});
在节点v12.13.1中,我使用以下命令行运行此命令:

node --experimental-modules temp.mjs

仅供参考,从您的评论来看,您似乎跳过了
.createInterface()
步骤。

为什么不
从“readline”
导入rl?因为它说r1.question()不是一个函数我想这是因为您跳过了
.createInterface()
步骤。请参阅下面我的答案中的工作代码。