虽然 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/<environment-name>
文件夹下的任何文件都将仅在 Sails 在 <environment-name>
环境中启动时加载。例如,保存在 config/env/production
下的文件仅在 Sails 在生产模式下启动时加载。config/env/<environment-name>.js
的文件都将仅在 Sails 在 <environment-name>
环境中启动时加载,并且将在任何从特定于环境的子文件夹加载的设置之上合并。例如,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 的“lift”过程中被解释。换句话说,在运行时更改某些选项将不会产生任何影响。例如,要更改应用程序运行的端口,您不能只更改sails.config.port
——您需要在配置文件或作为命令行参数等中更改或覆盖该设置,然后重新启动服务器。