@viewdo/dxp-story-cli
Version:
README.md
56 lines (44 loc) • 1.65 kB
JavaScript
const fs = require('fs');
const colors = require('colors');
function JSONConfigPlugin(buildInfo) {
this.buildInfo = buildInfo;
}
const evalCode = (source) => {
//console.log(source)
const results = eval(source);
return results.default();
}
JSONConfigPlugin.prototype.apply = function (compiler) {
compiler.plugin('emit', (compilation, cb) => {
const { buildFile, buildPath, serve } = this.buildInfo;
const { chunks = [] } = compilation;
chunks.forEach(chunk => {
chunk.files.forEach(filename => {
if (filename === '_json-evaluator.js') {
const source = compilation.assets[filename].source();
let jsonData = {};
try {
jsonData = evalCode(source);
} catch (err) {
console.log(colors.red(err));
}
if (serve) {
const content = JSON.stringify(jsonData, null, 2);
compilation.assets[`${buildPath}/${buildFile}`] = {
source: () => {
return Buffer.from(content);
},
size: () => {
return content.length * 4;
}
};
} else {
fs.writeFileSync(buildFile, JSON.stringify(jsonData, null, 2));
}
}
})
});
cb();
})
}
module.exports = JSONConfigPlugin;