UNPKG

koot

Version:

Koot.js - React isomorphic framework created by CMUX

105 lines (88 loc) 3.68 kB
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin // Libs & Utilities const getAppType = require('../../../utils/get-app-type') const getPort = require('../../../utils/get-port') const getChunkmapPathname = require('../../../utils/get-chunkmap-path') // Transformers const transformDist = require('./transform-dist') const transformI18n = require('./transform-i18n') const transformPWA = require('./transform-pwa') const transformTemplate = require('./transform-template') const transformConfigClient = require('./transform-config-client') const transformConfigServer = require('./transform-config-server') // Defaults & Data const defaults = require('../../../defaults/build-config') /** * 根据当前环境和配置,生成 Webpack 配置对象 * @async * @param {Object} kootConfig Koot.js 打包配置对象 (koot.build.js)。具体内容详见模板项目的 koot.build.js 文件内注释。 * @returns {Object} 生成的完整 Webpack 配置对象 */ module.exports = async (kootConfig = {}) => { // 确定环境变量 const { WEBPACK_BUILD_TYPE: TYPE, // WEBPACK_BUILD_ENV: ENV, WEBPACK_BUILD_STAGE: STAGE, // WEBPACK_ANALYZE, // WEBPACK_DEV_SERVER_PORT: CLIENT_DEV_PORT, // SERVER_DOMAIN, // SERVER_PORT, } = process.env const defaultPublicDirName = 'includes' const defaultPublicPathname = (TYPE === 'spa' ? '' : '/') + `${defaultPublicDirName}/` // 抽取配置 const data = Object.assign({}, defaults, kootConfig, { appType: await getAppType(), webpackConfig: {}, defaultPublicDirName, defaultPublicPathname, }) const { analyze = false } = data data.portServer = getPort(data.port) process.env.SERVER_PORT = data.portServer // ======================================================================== // // 处理配置 - 公共 // // ======================================================================== data.dist = await transformDist(data.dist) data.i18n = await transformI18n(data.i18n) data.pwa = await transformPWA(data.pwa) data.template = await transformTemplate(data.template) data.pathnameChunkmap = await getChunkmapPathname() if (typeof data.config === 'function') data.config = await data.config() if (typeof data.config !== 'object') data.config = {} // ======================================================================== // // 处理配置 - 客户端 / 开发 (CLIENT / DEV) // // ======================================================================== if (STAGE === 'client') data.webpackConfig = await transformConfigClient(data) if (STAGE === 'server') data.webpackConfig = await transformConfigServer(data) // ======================================================================== // // 模式: analyze // // ======================================================================== if (analyze) { if (Array.isArray(data.webpackConfig)) data.webpackConfig = data.webpackConfig[0] data.webpackConfig.plugins.push( new BundleAnalyzerPlugin({ analyzerPort: process.env.SERVER_PORT, defaultSizes: 'gzip' }) ) } // ======================================================================== // // 返回结果 // // ======================================================================== return data }