Cloudflare Workers:找不到模块:错误:无法解析“〜/ node_modules / nodemailer / lib / sendmail-transport”中的“ child_process”

时间:2020-09-26 13:31:45

标签: serverless cloudflare-workers

我在Cloudflare Worker中的Nodemailer软件包遇到以下错误,想记录我发现的内容。

Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport'

1 个答案:

答案 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包: