diff --git a/lib/webpack/config/base.js b/lib/webpack/config/base.js new file mode 100644 index 0000000000..6f74fa8627 --- /dev/null +++ b/lib/webpack/config/base.js @@ -0,0 +1,48 @@ +const Config = require('webpack-chain'); +const path = require('path'); + +module.exports = function createBaseConfig(props) { + const {outDir, themePath, siteDir, baseUrl} = props; + + const config = new Config(); + const isProd = process.env.NODE_ENV === 'production'; + + config + .mode(isProd ? 'production' : 'development') + .output.path(outDir) + .filename( + isProd ? 'static/js/[name].[chunkhash].js' : 'static/js/[name].js' + ) + .publicPath(isProd ? baseUrl : '/'); + + config.resolve + .set('symlinks', true) + .alias.set('@theme', themePath) + .set('@site', siteDir) + .set('@generated', path.resolve(__dirname, '../core/generated')) + .set('@core', path.resolve(__dirname, '../core')) + .end(); + + const libDir = path.join(__dirname, '..'); + config.module + .rule('js') + .test(/\.js$/) + .exclude.add(filepath => { + // Always transpile lib directory + if (filepath.startsWith(libDir)) { + return false; + } + // Don't transpile node_modules + return /node_modules/.test(filepath); + }) + .end() + .use('babel') + .loader('babel-loader') + .options({ + // do not pick local project babel config + babelrc: false, + presets: ['env', 'react'] + }); + + return config; +}; diff --git a/lib/webpack/config/dev.js b/lib/webpack/config/dev.js new file mode 100644 index 0000000000..58613caf85 --- /dev/null +++ b/lib/webpack/config/dev.js @@ -0,0 +1,10 @@ +const path = require('path'); +const createBaseConfig = require('./base'); + +module.exports = function createDevConfig(props) { + const config = createBaseConfig(props); + + config.entry('main').add(path.resolve(__dirname, '../core/devEntry.js')); + + return config; +}; diff --git a/lib/webpack/config/prod.js b/lib/webpack/config/prod.js new file mode 100644 index 0000000000..3d33eb740b --- /dev/null +++ b/lib/webpack/config/prod.js @@ -0,0 +1,12 @@ +const path = require('path'); +const createBaseConfig = require('./base'); + +module.exports = function createProdConfig(props) { + const config = createBaseConfig(props); + + config.entry('main').add(path.resolve(__dirname, '../core/prodEntry.js')); + + // TODO + + return config; +};