首页 > 解决方案 > 将 Webpack 与 Auth0 集成或如何将其他 Node.js 模块添加到 IBM Cloud Functions

问题描述

我正在尝试设置我的 nodejs 后端功能以将 Auth0 用于 IAM 服务。

我可以成功地将不使用 auth0 库的函数部署到我的 IBM Cloud 帐户,但是如果我尝试上传使用 auth0 库的函数,我会收到以下错误:

错误:无法创建操作“function_name”:请求内容格式错误:输入索引 1394034(第 1 行,位置 1394035)处出现意外的输入结束,预期为“””:

我尝试在我的 webpack.config.js 文件中使用外部组件:

// webpack.config.js
externals: {
    auth0: "commonjs auth0"
}

// mycode.js
const ManagementClient = require('auth0').ManagementClient;

我可以成功部署该功能,但是当我调用端点时,我收到此错误:

(0 , r(...).ManagementClient) 不是构造函数

标签: node.jswebpackibm-cloudauth0ibm-cloud-functions

解决方案


我找到了这篇文章:使用 Docker 向 IBM Cloud Functions 添加额外的 npm 模块

基本上,如果我正确理解您的问题,您需要一个未包含在 IBM Cloud Functions 基础映像中的附加包。此处列出了默认包含的软件包。但是 auth0 不是列表的一部分。

因此,按照博客文章,您可以创建一个 Dockerfile。

FROM ibmfunctions/action-nodejs-v10 
RUN npm install auth0

构建镜像(假设你有一个 docker 构建环境和一个工作的 Docker 帐户)并将其推送到 Dockerhub:

docker build -t your_docker_username/action-nodejs-v10-auth0 .
docker tag your_docker_username/action-nodejs-v10-auth0:latest your_docker_username/action-nodejs-v10-auth0:0.0.1
docker push your_docker_username/action-nodejs-v10-auth0:0.0.1

现在您可以创建一个 source.js 文件,其中包含

var ManagementClient = require('auth0').ManagementClient;

以及您的其余代码。

ibmcloud fn action update myAuth0Function --docker your_docker_username/action-nodejs-v10-auth0:0.0.1 source.js

我希望这对你有用。我已经更正了这篇文章中的一些错别字并进行了测试。到目前为止,我能够在操作代码中使用 auth0 模块。


推荐阅读