【问题标题】:Cloudflare Workers: Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport'Cloudflare Workers:找不到模块:错误:无法解析“~/node_modules/nodemailer/lib/sendmail-transport”中的“child_process”
【发布时间】: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


    【解决方案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 包:

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2021-01-30
      • 2018-11-18
      • 1970-01-01
      • 2021-02-20
      • 2019-10-16
      • 2021-02-21
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多