我在Cloudflare Worker中的Nodemailer软件包遇到以下错误,想记录我发现的内容。
Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport'
答案 0 :(得分:1)
使用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包: