簡體   English   中英

將目錄附加到 Amazon Lambda 環境變量 $NODE_PATH

[英]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模塊,丟失。

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

  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

這可能不是最漂亮的 hack,但它應該可以解決問題(免責聲明:實際上並沒有在 AWS Lambda 環境中嘗試過,但它至少使用 Node 12 在本地工作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM