将目录附加到 Amazon Lambda 环境变量 $NODE_PATH

2024-03-18

默认环境变量按照docs https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables:

NODE_PATH:/opt/nodejs/node8/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules

我想将我的自定义目录附加到它(而不是覆盖全部)

NODE_PATH:$NODE_PATH:/opt/nodejs/mycustom-directory

我从 lambda 控制台尝试了上面的内容,它覆盖了所有内容。$NODE_PATH作为字符串添加。不是在解析$NODE_PATH

打印环境时得到的输出:

NODE_PATH=$NODE_PATH:/opt/nodejs/mycustom-directory

类似的问题但仍然没有解决方案:AWS lambda 添加 PATH 变量? https://stackoverflow.com/questions/47136472/aws-lambda-add-path-variable


我也需要这个,因为我使用的是 AWS Lambda Layers,它位于默认的NODE_PATH,并且还希望能够使用本地根来避免长相对路径(例如import bar from foo/bar代替import bar from ../../../../foo/bar,但我没有找到任何方法append to NODE_PATH不丢失默认路径 - 一旦设置,路径node_modules- 包括aws-sdk模块丢失。

我能想到的唯一解决方案是:

  1. 显式设置NODE_PATH默认值加上您的自定义值(这会增加对 lambda 内部环境配置的丑陋依赖,您不必关心这一点)

  2. 将您的自定义库放在一个层中。很多时候,如果您可以将子模块提取为单独的层,那么这是一个很好的解决方案(但对于像我上面描述的那样消除应用程序本身内的长相对路径之类的情况没有帮助)。

  3. 以编程方式附加,通过具有第一行你的应用程序做

process.env.NODE_PATH = process.env.NODE_PATH + ":my-custom-path";
require("module").Module._initPaths(); // This re-initalizes the module loader to use the new NODE_PATH.

require('some-custom-module-in-my-custom-path'); // should work
require('aws-sdk') // should also work

这可能不是最漂亮的黑客,但它应该可以解决问题(免责声明:实际上尚未在 AWS Lambda 环境中尝试过此操作,但它至少可以在本地使用 Node 12 运行)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将目录附加到 Amazon Lambda 环境变量 $NODE_PATH 的相关文章

  • 亚马逊 CloudFront 延迟

    我正在为我正在开发的 Web 应用程序尝试使用 AWS S3 和 CloudFront 在应用程序中 我允许用户将文件上传到 S3 存储桶 使用 AWS SDK 并通过 CloudFront CDN 提供该文件 但问题是 即使文件已上传并在
  • NPM 如何处理版本冲突?

    由于 NPM 版本 3 节点模块和依赖项都安装在同一根级别 但是 如果我安装两个依赖于同一模块的两个不同版本的模块怎么办 例如 如果我安装异步npm i email protected cdn cgi l email protection
  • 异步减少返回承诺

    我有一个对象数组 我必须为来自异步函数的每个对象添加一个属性 我正在执行 Array reduce 来迭代每个元素并仅返回一个结果 具有新属性的一个对象数组 我有这个 const res await resultOne reduce asy
  • Nodejs + npm,在ntfs分区安装模块

    我在安装 npm 模块时遇到问题 NodeJS 安装在 Windows 主机上 Virtual Box 上运行的 Ubuntu 11 10 上 我的项目文件位于 NTFS 分区上 我必须与 Windows 共享它们 当我尝试安装某些 npm
  • MongoDB insertMany 并跳过重复项

    我试图insertMany https docs mongodb com manual reference method db collection insertMany 项目进入我的 Mongo 数据库 但我想跳过重复的 ID 我在用着N
  • Node.js:您什么时候知道异步任务集合何时完成?

    我想深入一个目录 并根据正则表达式检查我在其中看到的每个文件的名称 基本上是通用unix的一个版本find命令 仅用 Node js 编写 我不关心文件的顺序 但我确实想确保获得所有文件 我有以下代码 我认为 它接近我想要的 它需要一个 s
  • “brew升级节点”后“node -v”显示错误版本

    我升级了 Node js 版本brew upgrade node其中安装了v5 3 0 但是当我得到节点的版本时node v它显示 v0 10 29 I tried brew link overwrite node但这没有用 Brew 已链
  • 使用 dnode 从服务器向客户端发送消息

    几个月前 我发现了 nowjs 和 dnode 并最终使用了 nowjs 并且https github com Flotype nowclient https github com Flotype nowclient 用于客户端 服务器双向
  • 未处理的拒绝:发送后无法设置标头

    我正在 Dialogflow 中创建一个聊天机器人 当我尝试将数据添加到数据库时 它抛出了 未处理的拒绝 错误 这是我的index js文件 use strict const functions require firebase funct
  • Multer 使用数据创建新文件夹

    I use multer https github com expressjs multer 问题1 当我将以下代码片段放入app js app use multer dest uploads single file 它在根文件夹下创建一个
  • Node.js - 异步 JSON 查询

    如果这是一个愚蠢的问题 我深表歉意 但我对 Javascript 很陌生 而 Node js 确实让我很头疼 因为它是异步的 我的目标是从 API 查询 JSON 对象并能够使用它 我试图寻找关于我应该做什么的问题和答案 但它们对我来说都没
  • Node.js es6 使用index.js 导出/导入

    我有以下文件夹结构 src index js lib test js dist examples example js src lib test js export default class Test src index js impor
  • NPM:切勿为 npm 包安装嵌套的可选依赖项

    我正在编写一个包 A 我想将其发布到 NPM A 依赖于包 B 而包 B 又依赖于包 C 然后 C 有两个可选的本机依赖项 D 和 E 我明确知道我没有使用可选依赖项 D 和 E 并且永远不想当有人安装我的软件包时尝试安装它们 我知道你可以
  • 设置缩略图内容类型

    我需要设置Content Type对于缩略图 我已经尝试如下所示 但它不起作用 仍然 它存储为流 天青功能 索引 json var Jimp require jimp module exports context myBlob gt Rea
  • 带有非字符串值的 AWS S3 x-amz-meta 错误:InvalidHeader 和 InvalidParameterType

    尝试使用node js AWS sdk时s3Client upload带有元数据的可选参数 const AWS require aws sdk const s3Client new AWS S3 params Key key secret
  • 如何按单个整数字段对 JSON 进行排序? [复制]

    这个问题在这里已经有答案了 我有以下 JSON title title order 0 order 9 order 2 JSON 包含很多字段 我如何根据字段对它们进行排序order field 我一直在寻找 Nodejs 中内置的东西 但
  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 需要运行需要超过 15 分钟才能完成的 aws lambda 函数?

    我的 Lambda 函数的时间限制为 15 分钟 早于 5 分钟 Lambda 进程在 15 分钟后自动终止 但我的进程需要超过 15 分钟 我该如何应对 这是没有办法解决的 如果您正在进行某种长时间运行的处理 那么您的另一个选择可能是在
  • Axios GET 返回不可读的响应

    我有一个带有 axios 1 2 0 的简单 GET 的 Express 应用程序 const result AxiosResponse await axios get https jsonplaceholder typicode com
  • 不要在查询字符串 stringify 中对 url 进行编码

    有什么选择吗qs stringify那将not对网址进行编码 node gt var qs require querystring undefined gt qs stringify url http domain com url http

随机推荐