雖然 Sails 忠實地遵循慣例優於設定的哲學,但了解如何不時自訂這些方便的預設值非常重要。對於 Sails 中的幾乎每個慣例,都有一組相關的組態設定選項,可讓您調整或覆寫這些設定以符合您的需求。
正在尋找特定的設定嗎?請前往參考 > 組態設定,查看 Sails 中所有可用組態設定選項的完整指南。
Sails 應用程式可以透過程式碼設定、透過指定環境變數或命令列引數、透過變更本機或全域 .sailsrc
檔案,或(最常見的)使用慣例上位於新專案 config/
資料夾中的樣板組態設定檔案來設定。應用程式中使用的權威、合併組態設定可在執行階段於全域 sails
物件中以 sails.config
存取。
config/*
)預設情況下,新的 Sails 應用程式中會產生許多組態設定檔案。這些樣板檔案包含許多內嵌註解,旨在提供快速、隨時可用的參考,而無需在文件和文字編輯器之間來回跳轉。
在大多數情況下,sails.config
物件上的頂層鍵 (例如 sails.config.views
) 對應於應用程式中的特定組態設定檔案 (例如 config/views.js
);但是,組態設定可以以您喜歡的任何方式安排在 config/
目錄中的檔案中。重要的是設定的名稱 (即鍵) — 而不是它來自哪個檔案。
例如,假設您新增一個新檔案 config/foo.js
// config/foo.js
// The object below will be merged into `sails.config.blueprints`:
module.exports.blueprints = {
shortcuts: false
};
如需個別組態設定選項的詳盡參考,以及它們預設所在的檔案,請查看本節中的參考頁面,或查看"config/
" 在 Sails 應用程式的結構剖析中,以獲得更高層次的概觀。
config/env/*
)在標準組態設定檔案中指定的設定通常在所有環境 (即開發、生產、測試等) 中都可用。如果您希望某些設定僅在特定環境中生效,您可以使用特殊的環境特定檔案和資料夾
/config/env/<環境名稱>
資料夾下的任何檔案都將僅在 Sails 在 <環境名稱>
環境中啟動時載入。例如,儲存在 config/env/production
下的檔案將僅在 Sails 在生產模式下啟動時載入。config/env/<環境名稱>.js
的任何檔案都將僅在 Sails 在 <環境名稱>
環境中啟動時載入,並且將合併到從環境特定子資料夾載入的任何設定之上。例如,config/env/production.js
中的設定將優先於 config/env/production
資料夾中檔案的設定。預設情況下,您的應用程式在「開發」環境中執行。變更應用程式環境的建議方法是使用 NODE_ENV
環境變數
NODE_ENV=production node app.js
production
環境很特殊:根據您的組態設定,它會啟用壓縮、快取、最小化等功能。另請注意,如果您使用
config/local.js
,則該檔案中匯出的組態設定優先於環境特定的組態設定檔案。
config/local.js
檔案您可以使用 config/local.js
檔案為您的本機環境 (例如您的筆記型電腦) 設定 Sails 應用程式。此檔案中的設定優先於除 .sailsrc 之外的所有其他組態設定檔案。由於它們僅供本機使用,因此不應置於版本控制之下 (並且基於此原因包含在預設的 .gitignore
檔案中)。使用 local.js
來儲存本機資料庫設定、變更在您的電腦上啟動應用程式時使用的埠等。
如需更多資訊,請參閱概念 > 組態設定 > local.js 檔案。
sails.config
config
物件可在 Sails 應用程式實例 (sails
) 上取得。預設情況下,這會在啟動期間暴露在全域範圍中,因此可以從應用程式中的任何位置存取。
// This example checks that, if we are in production mode, csrf is enabled.
// It throws an error and crashes the app otherwise.
if (sails.config.environment === 'production' && !sails.config.security.csrf) {
throw new Error('STOP IMMEDIATELY ! CSRF should always be enabled in a production deployment!');
}
sails.config
值除了使用組態設定檔案之外,您還可以在啟動 Sails 時在命令列上設定個別的組態設定值,方法是以 sails_
作為組態設定鍵名稱的前綴,並以雙底線 (__
) 分隔巢狀鍵名稱。任何以此方式格式化的環境變數都將被解析為 JSON (如果可能)。例如,您可以執行以下操作,在命令列上將允許的 CORS 來源 (sails.config.security.cors.allowOrigins
) 設定為 ["http://somedomain.com","https://anotherdomain.com:1337"]
sails_security__cors__allowOrigins='["http://somedomain.com","https://anotherdomain.com:1337"]' sails console
請注意使用雙引號來表示 JSON 編碼值中的字串,以及包圍整個值的單引號,以便從主控台正確地傳遞到 Sails。
此值將僅在此特定 Sails 實例的生命週期內生效,並且將覆寫組態設定檔案中的任何值。
另請注意,使用環境變數指定的組態設定不會自動套用於以程式碼方式啟動的 Sails 實例。
上述規則有幾個特殊例外:
NODE_ENV
和PORT
。
NODE_ENV
是任何 Node.js 應用程式的慣例。當設定為'production'
時,它會設定sails.config.environment
。- 同樣地,
PORT
只是設定sails.config.port
的另一種方式。這嚴格來說是為了方便和向後相容性。以下是一個相對常見的範例,您可能會同時使用這兩個環境變數
PORT=443 NODE_ENV=production sails lift
當
NODE_ENV
和PORT
出現在目前程序環境中時,它們將套用於透過命令列或以程式碼方式啟動的任何 Sails 應用程式,除非明確覆寫。
環境變數是設定 Sails 應用程式的最強大方法之一。由於您可以自訂幾乎任何設定 (只要它是 JSON 可序列化的),因此此方法解決了許多問題,並且是我們核心團隊針對生產部署建議的策略。以下是一些
sails.config
值對於在命令列上設定環境變數可能不切實際的情況 (例如某些 Windows 系統),您可以使用常規命令列引數來設定組態設定選項。若要執行此操作,請指定選項名稱,並以兩個破折號 (--
) 作為前綴,巢狀鍵名稱以點分隔。命令列引數使用 minimist 進行解析,它不解析 JSON 值 (例如陣列或字典),但會處理字串、數字和布林值 (使用特殊語法)。以下是一些範例
// Set the port to 1338
sails lift --port=1338
// Set a custom "email" value to "[email protected]":
sails lift --custom.email='[email protected]'
// Turn on CSRF support
sails lift --security.csrf
// Turn off CSRF support
sails lift --no-security.csrf
// This won't work; it'll just try to set the value to the string "[1,2,3]"
sails lift --custom.array='[1,2,3]'
您也可以利用 Sails 的組態設定載入器來管理您自己的自訂設定。如需更多資訊,請參閱 sails.config.custom。
在組態設定方面,大多數時候您將專注於管理特定應用程式的執行階段設定:埠、資料庫設定等等。但是,自訂 Sails CLI 本身也可能很有用;以簡化您的工作流程、減少重複性工作、執行自訂建置自動化等。值得慶幸的是,Sails v0.10 新增了一個強大的新工具來做到這一點。
.sailsrc
檔案 與 Sails 中的其他組態設定來源不同,因為它也可以用於設定 Sails CLI — 全系統範圍、針對一組目錄,或僅當您 cd
進入特定資料夾時。這樣做的主要原因是自訂在執行 sails generate
和 sails new
時使用的產生器,但它也可用於安裝您自己的自訂產生器或套用硬式編碼的組態設定覆寫。
由於 Sails 將在目前工作目錄的祖先目錄中尋找「最近的」.sailsrc
,因此您可以安全地使用此檔案來設定您無法簽入雲端託管程式碼儲存庫的敏感設定 (例如您的資料庫密碼)。只需在您的 "$HOME" 目錄中包含一個 .sailsrc
檔案即可。如需更多資訊,請參閱 關於 .sailsrc
的文件。
根據您是從命令列使用 sails lift
或 node app.js
啟動 Sails 應用程式,還是以程式碼方式使用 sails.lift()
或 sails.load()
啟動,Sails 將從許多來源以特定順序提取其組態設定。
sails lift
或 node app.js
啟動時的優先順序 (依優先順序由高到低排列)sails lift --custom.mailgun.apiToken='foo'
變成 sails.config.custom.mailgun.apiToken
sails_
作為前綴並使用雙底線表示點的環境變數;例如:sails_port=1492 sails lift
(更多範例).sailsrc
檔案,或在 ../
、../../
等中找到的第一個檔案。.sailsrc
檔案 (例如 ~/.sailsrc
)。config/local.js
檔案config/env/*
檔案,這些檔案與您目前的 NODE_ENV 環境名稱 (預設為 development
) 相符config/
目錄中的任何其他檔案 (如果存在).lift()
或 .load()
的組態設定覆寫的可選字典 ({}
)config/local.js
檔案config/env/*
檔案,這些檔案與您目前的 NODE_ENV 環境名稱 (預設為 development
) 相符config/
目錄中的任何其他檔案 (如果存在)在某些情況下,
sails.config
中設定的內建含義僅在「啟動」過程中由 Sails 解釋。換句話說,在執行階段變更某些選項將不會產生任何影響。例如,若要變更應用程式執行的埠,您不能僅變更sails.config.port
— 您需要變更或覆寫組態設定檔案或作為命令列引數等的設定,然後重新啟動伺服器。