【发布时间】:2021-01-12 14:57:53
【问题描述】:
我在使用 Cloudflare Worker 中的 Nodemailer 包时遇到以下错误,我想记录我的发现。
Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport'
【问题讨论】:
标签: serverless cloudflare-workers
我在使用 Cloudflare Worker 中的 Nodemailer 包时遇到以下错误,我想记录我的发现。
Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport'
【问题讨论】:
标签: serverless cloudflare-workers
在使用 Cloudflare Workers 进行开发时,我在使用 Nodemailer 包时遇到以下错误:
Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport'
当我研究错误时,我发现 Webpack 正在尝试为客户端捆绑只能在服务器中使用的东西。见https://github.com/webpack/webpack/issues/744。
一种可能的解决方案是将externals 属性添加到custom webpack.config.js file for my Worker 并包含Webpack 无法解析的所有模块。见https://github.com/webpack/webpack/issues/744#issuecomment-320437402。
所以我的webpack.config.js 文件看起来像这样:
module.exports = {
target: "webworker",
entry: "./index.js",
externals: [
"child_process",
"dns",
"fs",
"net",
"tls",
]
}
但是,我发现您不能在 Cloudflare Worker 中使用像 Nodemailer 这样的包。 Cloudflare Workers 没有 Node 环境,因此您不能像在具有 Node 环境的服务器端平台中那样使用 Node 包。所以上面的 Webpack 配置无论如何都不会对你有多大好处,因为你仍然不能使用 Nodemailer 从 Cloudflare Worker 发送电子邮件。但是,通常有其他方法可以在 Cloudflare Worker 中使用 Node 包或其他 Node 功能。例如,为了从 Worker 发送电子邮件,您必须使用 REST API 而不是 Node 包:
【讨论】: