[英]Append a directory to Amazon Lambda Environment Variables $NODE_PATH
根據文檔的默認環境變量:
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
打印 env 時得到的輸出:
NODE_PATH=$NODE_PATH:/opt/nodejs/mycustom-directory
類似的問題,但仍然沒有解決方案: AWS lambda 添加 PATH 變量?
我想出了同樣的問題。 我寫了一段代碼來檢查 lambda 函數是否應用了 shell 變量擴展,並找出它們沒有。
我將環境變量FOO
設置為$NODE_PATH
,
然后,運行檢查代碼(在 lambda 函數中):
const { FOO } = process.env;
exports.lambdaHandler = async (event, context, callback) => {
console.log(FOO);
};
輸出是:
2019-02-22T08:29:05.714Z cde21239-628f-4a79-b046-6a14f177f59e $NODE_PATH
我只是將整個NODE_PATH
重寫為(my custom library path):/opt/nodejs/lib:/opt/nodejs/node8/node_modules/:/opt/nodejs/node_modules:/var/runtime/node_modules
NODE_PATH
的默認值在NODE_PATH
解釋:
https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
我也需要這個,因為我使用 AWS Lambda 層,它被放置在默認的NODE_PATH
,並且希望還能夠使用本地根來避免長相對路徑(例如import bar from foo/bar
而不是import bar from ../../../../foo/bar
,但我沒有找到任何方法來附加到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
這可能不是最漂亮的 hack,但它應該可以解決問題(免責聲明:實際上並沒有在 AWS Lambda 環境中嘗試過,但它至少使用 Node 12 在本地工作)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.