【问题标题】:NPM packages error out because of webpack由于 webpack 导致 NPM 打包出错
【发布时间】:2019-06-18 02:49:16
【问题描述】:

我创建了一个运行 create-react-app 项目并使用 Netlify 的 lambda 函数功能的 Netlify 站点。但是,当我尝试使用 mysql 或 mysql2 等软件包时,我会收到 webpack 错误。这些已记录在每个库的 github 问题上,但我无权访问 webpack 配置来添加“快速修复”。我无法想象我是唯一遇到这个问题的人,但我有什么选择?

有没有办法防止 webpack 接触我的服务器端包?这是因为 Netlify 如何将客户端和服务器端代码存储在同一个根目录中吗?

在过去的几天里,我已经用尽了几乎所有我能想到的选择。任何建议或见解将不胜感激。

【问题讨论】:

    标签: webpack create-react-app netlify


    【解决方案1】:

    因此,部署 Netlify 的 lambda 函数的方法不止一种。请记住,lambda 函数只是导出处理程序的节点模块。构建完成后,Netlify 将使用 netlify.toml 中 build 下的 functions 值来获取要为您的函数部署的目录。

    创建这些函数的常用方法

    • 从终端使用 Netlify Cli (netlify-cli)。
    • 在 CI/CD 期间,使用 netlify-lambda cli 从源捆绑函数 位置到您在netlify.toml 下指定的文件夹 build.functions。这使您可以为部署做好准备 带有针对现代 Javascript 的基本 webpack/Babel 设置。
    • 不要进行预处理,只需将您的函数直接放入您在netlify.toml 中指定的目录中build.functions 下。

    最后一个选项是您可能想要在这种情况下使用的选项。

    使用最后一个选项设置要部署的函数

    netlify.toml

    [build]
      functions = "functions"
    

    /functions/somefunction/somefunction.js

    var mysql = require('mysql');
    .
    .
    exports.handler = (event, context) => {
     .
     .
    }
    .
    

    创建一个包含所需依赖项的/functions/somefunction/package.json 文件。在这种情况下,您将使用mysql,以及您在函数中需要的任何其他内容。还应该使用package-lock.json 文件来锁定您想要的版本。

    在您的根 package.json 中,将预处理脚本命令设置为 cd ./functions/somefunction && npm install,以便在任何构建命令之前安装依赖项。这会将依赖项捆绑到 /functions/somefunction/node_modules 中,并准备好 netlify 与您的 somefunction 函数一起部署。预处理命令将允许您将 node_modules 留在您的 git 存储库之外。

    Here is an example of a create-react-app with netlify functions 使用上述方法,其中功能未使用 webpack 或 netlify-lambda 捆绑,但具有在部署之前的构建期间预安装的依赖项。此示例使用 joke-async 函数的子目录。

    【讨论】:

    • 这会阻止 webpack 接触这些 npm 包吗?这就是导致我在使用 mysql 库时出现问题的原因。我已经在 netlify dev 上尝试过你上面的内容,但我遇到了同样的错误。
    • 应该的。很难说为什么你的设置仍然会出现这些错误,而没有看到一切是如何设置的。 netlify dev 也可能试图转换代码。我必须测试那个案例。
    • 注意:刚刚使用 create-react-app 和 netlify dev 测试了上述内容,它在我的函数中使用 const mysql = require('mysql') 并在函数目录中使用捆绑的 package.json 时没有错误。
    • netlify.toml我指向./lambda' to build my functions and the build/serve`函数指向functions作为源。如果我尝试使它们相同,我会收到一个 Netlify 开发错误,指出它们必须不同。
    • 另外,当我使用import DB from './core/DB' 导入我的函数时,我已将 mysql 代码放在另一个文件中,这可能是问题吗?
    猜你喜欢
    • 2021-11-11
    • 2018-06-16
    • 2021-11-08
    • 2015-01-22
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多