diff --git a/lib/webpack/base.js b/lib/webpack/base.js new file mode 100644 index 0000000000..c7970dfcfd --- /dev/null +++ b/lib/webpack/base.js @@ -0,0 +1,55 @@ +const Config = require('webpack-chain'); +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +module.exports = function createBaseConfig(props) { + const {outDir, themePath, sourceDir} = props; + + const config = new Config(); + const isProd = process.env.NODE_ENV === 'production'; + + config + .mode(isProd ? 'production' : 'development') + .output.path(outDir) + .filename(isProd ? '[name].[chunkhash].js' : '[name].js') + .publicPath(isProd ? publicPath : '/'); + + config.resolve + .set('symlinks', true) + .alias.set('@theme', themePath) + .set('@source', sourceDir) + .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'] + }); + + config.plugin('html-webpack-plugin').use(HtmlWebpackPlugin, [ + { + inject: false, + hash: true, + template: path.resolve(__dirname, '../core/index.html'), + filename: 'index.html' + } + ]); + + return config; +}; diff --git a/lib/webpack/dev.js b/lib/webpack/dev.js new file mode 100644 index 0000000000..6b420c559c --- /dev/null +++ b/lib/webpack/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/index.js')); + + return config; +};