我正在寻找一种方法,可以使用单个公共netlify.toml
在netlify上定义来自同一存储库的两个站点构建。有可能这样做吗?
我有一个名为hugo-dream-plus的GitHub存储库,为此我在netlify上配置了两个网站构建,即dream-plus-posts
和dream-plus-cards
。除了构建命令之外,这两个构建都共享相同的环境变量和几乎所有配置:
hugo --config cards.toml #For dream-plus-cards
hugo --config posts.toml #For dream-plus-posts
我想知道是否有办法创建一个通用的netlify.toml
文件,因为这两个网站的两个版本的仓库都是相同的。
我已经使用Web UI分别配置每个内部版本,但是修改每个内部版本非常麻烦,这就是为什么我更喜欢上面的情况。
我打算做的是让两个构建之间共享所有配置,除了构建命令(构建命令如上所示)外。
答案 0 :(得分:2)
截至本答案发布之日,Netlify不支持更改netlify.toml
中的值的方法,因为它是在构建之前读取的。除了标题和重定向之外,您可以在构建时进行更改。
不支持将环境变量直接用作netlify.toml文件中的值($ VARIABLENAME)。
您可以运行脚本命令,并根据域或环境变量对其进行更改。 有一些可行的设置。
这是我根据域名可以完成您想要的事情的方式。
netlify.toml
[build]
command = "node ./scripts/custom.js"
publish = "public"
scripts/custom.js
const exec = require('child_process').exec;
const site = process.env.URL || "https://example.com";
const domain = site.split('/')[site.split('/').length - 1];
let buildCommand;
switch(domain) {
case "dream-plus-posts.netlify.com":
buildCommand = 'hugo --config posts.toml';
break;
case "dream-plus-cards.netlify.com":
buildCommand = 'hugo --config cards.toml';
break;
default:
throw `Domain ${domain} is invalid`;
}
async function execute(command){
return await exec(command, function(error, stdout, stderr){
if (error) {
throw error;
}
console.log(`site: ${site}`);
console.log(`domain: ${domain}`);
console.log(stdout);
});
};
execute(buildCommand);