node.js - 使用“--experimental-modules”编译时如何修复“ReferenceError:require is not defined”错误?
问题描述
内部.mjs:
import request from 'request-promise-native'
const rocketChatServer = 'http://localhost:3000';
const rocketChatAdminUserId = 'aobEdbYhXfu5hkeqG';
const rocketChatAdminAuthToken = '9HqLlyZOugoStsXCUfD_0YdwnNnunAJF8V47U3QHXSq';
export async function fetchUser (username) {
const rocketChatUser = await request({
url: `${rocketChatServer}/api/v1/users.info`,
method: 'GET',
qs: {
username: username
},
headers: {
'X-Auth-Token': rocketChatAdminAuthToken,
'X-User-Id': rocketChatAdminUserId
}
});
return rocketChatUser;
}
export async function loginUser (email, password) {
const response = await request({
url: `${rocketChatServer}/api/v1/login`,
method: 'POST',
json: {
user: email,
password: password
}
});
return response;
}
export async function createUser(username, name, email, password) {
const rocketChatUser = await request({
url: `${rocketChatServer}/api/v1/users.create`,
method: 'POST',
json: {
name,
email,
password,
username,
verified: true
},
headers: {
'X-Auth-Token': rocketChatAdminAuthToken,
'X-User-Id': rocketChatAdminUserId
}
});
return rocketChatUser;
}
export async function createOrLoginUser (username, name, email, password,) {
try {
const user = await fetchUser(username);
// Perfom login
return await loginUser(email, password);
} catch (ex) {
if (ex.statusCode === 400) {
// User does not exist, creating user
const user = await createUser(username, name, email, password);
// Perfom login
return await loginUser(email, password);
} else {
throw ex;
}
}
}
外部.mjs:
import { createOrLoginUser } from './internal.mjs';
var express = require('express');
var app = express();
app.post('/login', async (req, res) => {
// ....CODE TO LOGIN USER
// Creating or login user into Rocket chat
try {
const response = await createOrLoginUser(user.username, user.firstName, user.email, user.password);
req.session.user = user;
// Saving the rocket.chat auth token and userId in the database
user.rocketchatAuthToken = response.data.authToken;
user.rocketchatUserId = response.data.userId;
await user.save();
res.send({ message: 'Login Successful'});
} catch (ex) {
console.log('Rocket.chat login failed');
}
})
输出:
me@test:~/node$ node --experimental-modules external.mjs
(node:7482) ExperimentalWarning: The ESM module loader is experimental.
ReferenceError: require is not defined
at file:///home/me/node/external.mjs:3:15
at ModuleJob.run (internal/loader/ModuleJob.js:94:14)
at <anonymous>
突然之间,我不得不处理 node.js 进行一些测试,而我之前没有体验过 node.js。
我不认为 internal.mjs 有任何问题,因为它在运行命令“node --experimental-modules internal.mjs”时没有显示错误。但是为 external.mjs 运行它会给我一个错误,我无法解决好几个小时。
如何解决此错误以使其编译?
解决方案
如果您要使用新的 ESM 模块,请不要使用require
, import express
:
改变:
var express = require('express');
至
import express from 'express';
推荐阅读
- haskell - 努力理解“无法构造无限类型”错误
- c++ - 为进程的 boost::asio 线程设置更高的优先级
- android - 如何在循环中从 Spinner 获取所有值
- django - 如何找到 FK 对象的名称及其计数?
- reactjs - Material DateTimePicker onChange Typescript 不匹配错误
- r - R中两次之间的差异
- powershell - 使用 PowerShell 复制事件查看器日志并在成功复制时将其删除
- react-native - 用一种字体包裹整个 React Native 应用程序
- python - Python time_ns 时间差在 1 毫秒 (10^6 ns) 以下时为 0
- marathontesting - 马拉松 | JNLP 应用程序上的 Java 驱动程序 - 没有可用的顶级窗口