UNPKG

deployment-tools

Version:

A Node.js scripts that helps you to compile and deploy the static assets (CSS/JavaScript/images) of your website without gulp and grunt using Node.js and npm scripts

62 lines (56 loc) 3.89 kB
import find from 'lodash/find'; import fs from '../libs/fs'; /** * Update web.config with webpackManifest, CSS and JS files hash. * @param {object} [obj] - obj * @param {object} [obj.longTermHash] - Return if long term hash is false * @param {string} obj.webConfig - Relative path of webconfig * @param {string} obj.cdn - The CDN domain * @param {string} obj.projectName - The project name * @param {string} obj.buildPathCss - The CSS build Path * @return {Promise} A Promise */ async function updateWebconfigChunk({ longTermHash = false, webConfigFile, cdn, projectName, buildPathCss }) { // check if config parameter exists. Web.config is OPT-IN if (!longTermHash) { return false; } // TODO: make this parallel const webpackAssets = await fs.readJsonAsync('wp-assets-stats.json'); const css = await fs.readJsonAsync('css-assets-stats.json'); const xmlString = await fs.readFileAsync(webConfigFile); // <add key="vendors" value="" /> // <add key="main" value="" /> // <add key="vendors-backoffice" value="" /> // <add key="main-backoffice" value="" /> // <add key="main.css" value="" /> // <add key="main-admin.css" value="" /> // <add key="webpackManifest" value="" /> const mainJs = webpackAssets.assetsByChunkName.main ? webpackAssets.assetsByChunkName.main[0] : ''; const vendorsJs = webpackAssets.assetsByChunkName.vendors ? webpackAssets.assetsByChunkName.vendors[0] : ''; const mainBackofficeJs = webpackAssets.assetsByChunkName['main-backoffice'] ? webpackAssets.assetsByChunkName['main-backoffice'][0] : ''; const vendorsBackofficeJs = webpackAssets.assetsByChunkName['vendors-backoffice'] ? webpackAssets.assetsByChunkName['vendors-backoffice'][0] : ''; const modernizr = find(webpackAssets.assets, i => i.name.indexOf('modernizr') >= 0); const modernizrJs = modernizr ? modernizr.name : ''; const mainCss = find(css.assets, i => i.filename.indexOf('main.css') >= 0); const mainAdminCss = find(css.assets, i => i.filename.indexOf('main-admin.css') >= 0); const jsRemotePath = webpackAssets.publicPath; const cssRemotePath = `${cdn}/${projectName}${buildPathCss}`; const webpackManifest = {}; // take only js files (exclude .map files) webpackAssets.assets.filter(i => i.name.match('.js$') !== null).forEach((item) => { webpackManifest[item.chunks[0]] = item.name; }); let newWebconfigXmlString = xmlString.replace(/<add .*"vendors".*\/>/igm, `<add key="vendors" value="${jsRemotePath}${vendorsJs}" />`); newWebconfigXmlString = newWebconfigXmlString.replace(/<add .*"main".*\/>/igm, `<add key="main" value="${jsRemotePath}${mainJs}" />`); newWebconfigXmlString = newWebconfigXmlString.replace(/<add .*"vendors-backoffice".*\/>/igm, `<add key="vendors-backoffice" value="${jsRemotePath}${vendorsBackofficeJs}" />`); newWebconfigXmlString = newWebconfigXmlString.replace(/<add .*"main-backoffice".*\/>/igm, `<add key="main-backoffice" value="${jsRemotePath}${mainBackofficeJs}" />`); newWebconfigXmlString = newWebconfigXmlString.replace(/<add .*"modernizr".*\/>/igm, `<add key="modernizr" value="${jsRemotePath}${modernizrJs}" />`); if (mainCss) { newWebconfigXmlString = newWebconfigXmlString.replace(/<add .*"main\.css".*\/>/igm, `<add key="main.css" value="${cssRemotePath}${mainCss.filename.replace(/\.css$/, '.')}${mainCss.filehash}" />`); } if (mainAdminCss) { newWebconfigXmlString = newWebconfigXmlString.replace(/<add .*"main-admin\.css".*\/>/igm, `<add key="main-admin.css" value="${cssRemotePath}${mainAdminCss.filename.replace(/\.css$/, '.')}${mainAdminCss.filehash}" />`); } newWebconfigXmlString = newWebconfigXmlString.replace(/<add .*"webpackManifest".*\/>/igm, `<add key="webpackManifest" value='${JSON.stringify(webpackManifest)}' />`); return fs.writeFileAsync(webConfigFile, newWebconfigXmlString); } export default updateWebconfigChunk;