kk-webpack-base--config
Version:
Webpack config for kk-webpack-base
79 lines (71 loc) • 2.21 kB
JavaScript
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
const { config } = require('./webpack.project-config.js');
/**
* Are we in development mode?
*/
const isProd =
process.env.NODE_ENV === 'prod' || process.env.NODE_ENV === 'production';
const isDev = !isProd;
/**
* Create webpack aliases
*/
const createWebpackAliases = (aliases) => {
const result = {};
for (const name in aliases) {
result[name] = path.join(cwd, aliases[name]);
}
return result;
};
const createWebpackEntrypoints = (filepath, fileExt) => {
let entrypoints = {};
try {
if (fs.existsSync(filepath)) {
const files = fs.readdirSync(filepath);
if (!(files.length > 0)) {
console.warn(`No ${fileExt} files found in '${filepath}'.`);
}
files.forEach((file) => {
const restrictedFileNames = ['index', 'twig-data'];
const thisFileName = path.parse(file).name;
const thisFileExt = path.extname(file).toLowerCase();
const noUnderscorePrefix = thisFileName.substring(0, 1) !== '_';
const notRestricted = !restrictedFileNames.includes(thisFileName);
if (thisFileExt === fileExt && noUnderscorePrefix && notRestricted) {
entrypoints[thisFileName] = `${filepath}/${file}`;
}
});
if (!(Object.keys(entrypoints).length > 0)) {
console.log(
`No additional ${fileExt} entrypoints found in '${filepath}...'`
);
} else {
const entrypointsTitle = fileExt + ' entrypoints';
const entrypointsTableOutput = Object.keys(entrypoints).map((ep) => ({
[entrypointsTitle]: ep,
}));
console.table(entrypointsTableOutput);
}
}
} catch (err) {
console.warn(`Could not create ${fileExt} entrypoints.`);
}
return entrypoints;
};
const copyThingPattern = (thing, to = '') => ({
from: path.resolve(process.cwd(), config.sourcePath + thing),
to: path.resolve(process.cwd(), config.publicPath + to),
noErrorOnMissing: true,
globOptions: {
ignore: ['**/*.gitkeep'],
},
});
// Export helpers
module.exports = {
isProd,
isDev,
createWebpackAliases,
createWebpackEntrypoints,
copyThingPattern,
};