@fxext/cli
Version:
fanxing miniapp cli
62 lines (57 loc) • 1.97 kB
JavaScript
const yargs = require('yargs');
const path = require('path');
const config = require('./config');
const plugins = require('./plugins');
const rules = require('./rules');
const { getJsEntry } = require('../utils');
let PAGE_NAME = yargs.argv.page || '';
if (PAGE_NAME.includes(',')) {
PAGE_NAME = `*(${PAGE_NAME.replace(/,/g, '|')})`;
}
const createWebpackConfig = (builder, baseConfig) => {
const buildConfig = builder.buildConfig;
const webpackConfig = [];
for (const entryItem of buildConfig) {
const { layoutType, framework } = entryItem;
if (framework !== 'cocos') {
webpackConfig.push({
...baseConfig,
entry: getJsEntry(`/*(${layoutType})/app/*.js`, path.join(process.cwd(), '/')),
module: {
rules: rules(config, builder, entryItem),
},
plugins: plugins(config, builder, entryItem),
})
}
}
return webpackConfig;
}
module.exports = (projectConfig, mode = 'development') => {
const { builder } = projectConfig;
config.isProduction = mode === 'production';
config.sdkVersion = builder.sdkVersion;
const baseConfig = {
mode,
output: {
path: config.isProduction ? config.path.pub : config.path.dev,
filename: `${config.chunkhashName}.js`,
chunkFilename: `${config.chunkhashName}.js`,
publicPath: '/',
},
watch: !config.isProduction,
resolve: {
modules: [path.join(process.cwd(), 'node_modules'), path.join(__dirname, '../../node_modules')],
extensions: ['.js', '.jsx', '.css', '.scss', '.png', '.jpg', '.jpeg', '.ico', '.svg', '.vue', '.json'],
alias: config.alias,
},
resolveLoader: {
modules: ['node_modules', path.join(__dirname, '../../node_modules')],
},
optimization: {
noEmitOnErrors: true
},
devtool: config.isProduction ? config.sourceMap.production : config.sourceMap.development,
stats: 'errors-only'
};
return createWebpackConfig(builder, baseConfig);
};