const { execSync } = require('child_process'); const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); const fse = require('fs-extra'); // get version from git branch name, // e.g. release/1.0.7 => 1.0.7 // release/1.0.7-beta => 1.0.7 (beta) // release/1.0.7-beta.0 => 1.0.7 (beta) function getVersion() { const gitBranchName = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }); const reBranchVersion = /^(?:[\w-]+\/)(\d+\.\d+\.\d+)(-?beta)?(?:\.\d+)?$/im; const match = reBranchVersion.exec(gitBranchName); if (!match) { console.warn(`[engine] gitBranchName: ${gitBranchName}`); return 'N/A'; } const [_, version, beta] = match; return beta && beta.endsWith('beta') ? `${version}-beta` : version; } const releaseVersion = getVersion(); module.exports = ({ context, onGetWebpackConfig }) => { onGetWebpackConfig((config) => { ['jsx', 'tsx'].forEach((rule) => { config.module .rule(rule) .exclude.clear() .add(/node_modules(?!(.+_component_demo|.+build-plugin-component))/) .end() .use('babel-loader') .tap((options) => { const { plugins = [] } = options; return { ...options, plugins: [ ...plugins, ['@babel/plugin-proposal-class-properties', { loose: true }], ], }; }); }); config.resolve .plugin('tsconfigpaths') .use(TsconfigPathsPlugin, [{ configFile: './tsconfig.json', }]); config .plugin('define') .use(context.webpack.DefinePlugin, [{ VERSION_PLACEHOLDER: JSON.stringify(releaseVersion), }]); config.plugins.delete('hot'); config.devServer.hot(false); }); };