本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Elastic Beanstalk 上設定應用程式的相依性
您的應用程式可能依賴某些 Node.js 模組,例如您在require()
陳述式中指定的模組。這些模組儲存在 node_modules
目錄中。當應用程式執行時,Node.js 從此目錄載入模組。如需詳細資訊,請參閱中的從 node_modules 資料夾載入
您可以使用 package.json
檔案來指定這些模組相依性。如果 Elastic Beanstalk 偵測到此檔案且 node_modules
目錄不存在,Elastic Beanstalk 會以 webapp 使用者的身分執行 npm install
。npm
install
命令將相依性安裝在 Elastic Beanstalk 事先建立的 node_modules
目錄中。npm
install
命令會從公共 npm 登錄檔或其他位置存取 package.json
檔案中列出的套件。如需詳細資訊,請參閱 npm Docs
如果 Elastic Beanstalk 偵測到 node_modules
目錄,則即使有 package.json
檔案,Elastic Beanstalk 也不會執行 npm install
。Elastic Beanstalk 假設 node_modules
目錄中的相依性套件可用 Node.js 以存取和載入。
下列各節提供有關建立 的詳細資訊 Node.js 應用程式的模組相依性。
注意
如果您在 Elastic Beanstalk 執行 npm install
時遭遇任何部署問題,請考慮使用其他方法。將 node_modules
目錄以及相依性模組納入您的應用程式原始碼套件中。這樣做可以避免在排查問題時,安裝來自公共 npm 登錄檔的相依性的問題。而由於相依性模組來自本機目錄,所以這可能也有助於縮短部署時間。如需詳細資訊,請參閱 包含 Node.js Node_modules 目錄中的相依性
指定 Node.js 具有 package.json 檔案的相依性
將 package.json
檔案包含在專案來源根目錄中來指定相依性套件並提供啟動命令。當有 package.json
檔案存在且您專案來源的根目錄中沒有 node_modules
目錄時,Elastic Beanstalk 會以 webapp 使用者的身分執行 npm install
,以安裝來自公共 npm 登錄檔的相依性。Elastic Beanstalk 也會使用 start
命令來啟動您的應用程式。如需有關 package.json
檔案的詳細資訊,請參閱 npm Docs 網站中的《在 package.json
檔案中指定相依性
使用 scripts
關鍵字來提供啟動命令。現在,在 aws:elasticbeanstalk:container:nodejs
命名空間中使用 scripts
關鍵字來取代舊版的 NodeCommand
選項。
範例 package.json – Express
{
"name": "my-app",
"version": "0.0.1",
"private": true,
"dependencies": {
"ejs": "latest",
"aws-sdk": "latest",
"express": "latest",
"body-parser": "latest"
},
"scripts": {
"start": "node app.js"
}
}
生產模式和開發相依性
若要在package.json
檔案中指定您的相依性,請使用相依性和devDependencies屬性。dependencies 屬性可指定生產中應用程式所需的套件。devDependencies 屬性會指定僅本機開發和測試所需的套件。
Elastic Beanstalk 會使用下列命令,以 webapp 使用者的身分執行 npm install
。命令選項會根據應用程式執行之平台分支上所包含的 npm 版本而有所不同。
-
npm v6 — 在預設情況下,Elastic Beanstalk 會在生產模式中安裝相依性。其使用命令
npm install --production
。 -
npm v7 或更高版本 — Elastic Beanstalk 省略 devDependencies。其使用命令
npm install --omit=dev
。
上述兩個命令都不會安裝屬於 的套件devDependencies。
如果您需要安裝devDependencies套件,請將 NPM_USE_PRODUCTION environment 屬性設定為 false
。透過此設定,我們不會在執行 npm 安裝時使用上述選項。這將導致安裝devDependencies套件。
SSH 和 HTTPS
從 2023 年 3 月 7 日開始,您也可以使用 SSH和 HTTPS通訊協定從 Git 儲存庫擷取套件。平台分支 Node.js 16 同時支援 SSH和 HTTPS通訊協定。Node.js 14 僅支援HTTPS通訊協定。
範例 package.json – Node.js 16 同時支援 HTTPS和 SSH
...
"dependencies": {
"aws-sdk": "https://github.com/aws/aws-sdk-js.git",
"aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git"
}
版本和版本範圍
重要
指定版本範圍的功能不適用於在 AL2023 上執行的 Node.js 平台分支。我們僅在 AL2023 的特定 Node.js 分支中支援一個 Node.js 版本。如果 package.json
檔案指定了版本範圍,我們將予以忽略,並預設為 Node.js 的平台分支版本。
使用package.json
檔案中的engines
關鍵字來指定 Node.js 您希望應用程式使用的版本。您也可以使用 npm 標記法指定版本範圍。如需版本範圍語法的詳細資訊,請參閱 上的使用 npm 的語意版本控制engines
關鍵字 Node.js package.json
檔案會取代aws:elasticbeanstalk:container:nodejs
命名空間中的舊版NodeVersion
選項。
範例 package.json
– 單一 Node.js version
{
...
"engines": { "node" : "14.16.0" }
}
範例 package.json
– Node.js 版本範圍
{
...
"engines": { "node" : ">=10 <11" }
}
指定版本範圍時,Elastic Beanstalk 會安裝最新的 Node.js 平台在 範圍內可用的版本。在此範例中,範圍指出版本必須大於或等於版本 10,但小於版本 11。因此,Elastic Beanstalk 安裝最新的 Node.js version 10.x.y,其可在支援的平台 上使用。
請注意,您只能指定 Node.js 與您的平台分支對應的版本。例如,如果您使用 Node.js 16 個平台分支,您只能指定 16.x.y Node.js 版本。您可以使用 npm 支援的版本範圍選項以允許更多的靈活性。對於有效 Node.js 每個平台分支的版本,請參閱 Node.js AWS Elastic Beanstalk 平台指南中的 。
注意
如果您所使用的 Node.js 版本的支援已從平台移除,您必須在平台更新之前變更或移除 Node.js 版本設定。當發現一個或多個版本的 Node.js 存在安全漏洞時,可能會出現此種狀況。
此時,如果嘗試將不支援已設定 Node.js 版本的平台更新至新版本,此動作將會失敗。為省去建立新環境的必要,請將 package.json
中的 Node.js 版本設定變更為新舊平台版本皆支援的 Node.js 版本。您可以選擇指定包含支援版本的 Node.js 版本範圍,如本主題之前所述。您也可以選擇移除設定,然後部署新的來源套件。
包含 Node.js Node_modules 目錄中的相依性
若要將相依性套件與應用程式程式碼一起部署至環境執行個體,請將它們包含在專案來源根中名為 node_modules
的目錄內。如需詳細資訊,請參閱 npm Docs 網站中的《在本機下載和安裝套件
當您將node_modules
目錄部署到 AL2023/AL2 Node.js 平台版本,Elastic Beanstalk 假設您提供自己的相依性套件,並避免安裝 package.json 檔案中指定的相依性。Node.js 在node_modules
目錄中尋找相依性。如需詳細資訊,請參閱中的從 node_modules 資料夾載入
注意
如果您在 Elastic Beanstalk 執行 npm install
時遭遇任何部署問題,在調查問題時,請考慮使用本主題中描述的方法作為變通措施。