gpt4 book ai didi

node.js - 将目录附加到 Amazon Lambda 环境变量 $NODE_PATH

转载 作者:行者123 更新时间:2023-12-02 16:48:43 27 4
gpt4 key购买 nike

默认环境变量按照docs :

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 add PATH variable?

最佳答案

我也需要这个,因为我使用的是 AWS Lambda 层,它位于默认的 NODE_PATH 上。 ,并且还希望能够使用本地根来避免长相对路径(例如 import bar from foo/bar 而不是 import bar from ../../../../foo/bar ,但我没有找到任何方法附加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 运行)。

关于node.js - 将目录附加到 Amazon Lambda 环境变量 $NODE_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624226/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com