-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcreate-redirects.js
39 lines (35 loc) · 1.21 KB
/
create-redirects.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const yaml = require('js-yaml');
const { execSync } = require('child_process');
const fs = require('fs');
function getRedirectList(config) {
if (config.redirects) {
if (Array.isArray(config.redirects)) {
return config.redirects;
}
return [config.redirects];
}
return [];
}
function getRedirectPaths(config) {
const redictList = getRedirectList(config);
return redictList.map((redirect) => process.env.PWD + '/' + redirect);
}
function createRedirects(config) {
const BASE_PATH = config.basePath + config.publicPath;
const DIST_DIR = config.dist;
const redirectFilePaths = getRedirectPaths(config);
const redirectList = redirectFilePaths.reduce((acc, redirectFilePath) => {
const content = fs.readFileSync(redirectFilePath);
return acc + '\n' + content;
}, '');
const redirects = yaml.load(redirectList);
if (redirects) {
Object.keys(redirects).map((origin) => {
const url = new URL(BASE_PATH + redirects[origin]);
const html = `<html><head><meta http-equiv="refresh" content="0;URL=${url}"/></head></html>`;
execSync(`mkdir -p ${DIST_DIR}/${origin}/`);
fs.writeFileSync(`${DIST_DIR}/${origin}/index.html`, html);
});
}
}
module.exports = createRedirects;