-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcli.js
executable file
·71 lines (61 loc) · 2 KB
/
cli.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env node
// modified version of rewrite script from
// https://blog.container-solutions.com/deploying-configurable-frontend-web-application-containers
const cheerio = require("cheerio");
const copy = require("recursive-copy");
const fs = require("fs");
const rimraf = require("rimraf");
if (process.argv.length < 4) {
console.error("Usage: vue-rewrite-config <vue dist dir> <dest dir>");
process.exit(1);
}
const DIST_DIR = process.argv[2];
const DEST_DIR = process.argv[3];
const envVarPrefix = process.env.REWRITE_CONFIG_VAR_PREFIX || "VUE_APP_";
// all environment variables that start with VUE_APP_
const ENV = Object.keys(process.env)
.filter(k => k.startsWith(envVarPrefix))
.reduce((obj, key) => {
obj[key] = process.env[key];
return obj;
}, {});
/**
* Rewrite meta tag config values in "index.html".
* @param {string} file
* @param {object} values
*/
function rewriteIndexHTML(file, values) {
console.info(`Reading '${file}'`);
fs.readFile(file, "utf8", function(error, data) {
if (!error) {
const $ = cheerio.load(data);
console.info(`Rewriting ${Object.entries(values).length} values:`);
for (const [key, value] of Object.entries(values)) {
console.log(`${key} = ${value}`);
$(`[name=${key}]`).attr("content", value);
}
fs.writeFile(file, $.html(), function(error) {
if (!error) {
console.info(`Wrote '${file}'`);
} else {
console.error(error);
}
});
} else {
console.error(error);
}
});
}
// - Delete existing files from public directory
// - Copy `dist` assets to public directory
// - Rewrite config meta tags on public directory `index.html`
rimraf(DEST_DIR + "/*", {}, function() {
copy(`${DIST_DIR}`, `${DEST_DIR}`, { debug: true }, function(error, results) {
if (error) {
console.error("Copy failed: " + error);
} else {
console.info("Copied " + results.length + " files");
rewriteIndexHTML(`${DEST_DIR}/index.html`, ENV);
}
});
});