默认环境变量按照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
模块丢失。
我能想到的唯一解决方案是:
显式设置NODE_PATH
默认值加上您的自定义值(这会增加对 lambda 内部环境配置的丑陋依赖,您不必关心这一点)
将您的自定义库放在一个层中。很多时候,如果您可以将子模块提取为单独的层,那么这是一个很好的解决方案(但对于像我上面描述的那样消除应用程序本身内的长相对路径之类的情况没有帮助)。
以编程方式附加,通过具有第一行你的应用程序做
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(使用前将#替换为@)