qn-lcdp
Version:
青能科技低代码前端
114 lines (96 loc) • 3.17 kB
JavaScript
const config = require('./config')()
const utils = require('./utils')
const core = require('./index')
const baseConfig = require('./config/webpack.base.extend')
const devConfig = require('./config/webpack.dev.extend')
const prodConfig = require('./config/webpack.prod.extend')
const proxyFactory = require('./config/proxy.factory')
// 获取子应用信息
const packageJson = core.IsInstalled ? require('../../../package.json') : require('../package.json')
const apps = packageJson.apps || {}
const THEME = process.env.THEME || 'default'
let publicPath = utils.join('/', config.publicPath)
let outputDir = utils.join(config.outputDir, config.publicPath)
let port = config.devServerPort
let proxy = null
let app = null
if (process.env.APP) {
const appName = process.env.APP
app = apps[appName]
publicPath = app.publicPath ? utils.join('/', app.publicPath) : utils.join(publicPath, app.name)
outputDir = app.outputDir ? utils.join(outputDir, app.outputDir) : utils.join(outputDir, app.name)
port = app.port
} else {
proxy = proxyFactory(apps)
}
if (config.devServerProxy) {
proxy = Object.assign(proxy || {}, config.devServerProxy)
}
module.exports = {
// 网站访问路径(部署目录)
publicPath: utils.urlFormat(publicPath),
// 输出目录
outputDir: process.env.BUILD_THEME ? core.BuildThemeDistPath : outputDir,
// 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
assetsDir: config.assetsDir,
// 代码检测提示方式
lintOnSave: config.lintOnSave,
// 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来
transpileDependencies: config.transpileDependencies,
// 生成环境是否生成SourceMap
productionSourceMap: !!config.productionSourceMap,
devServer: {
// 开发环境服务启动端口号
port: port,
// API 代理
proxy: proxy,
hot: true,
disableHostCheck: true,
overlay: {
warnings: false,
errors: true
},
headers: {
'Access-Control-Allow-Origin': '*'
}
},
chainWebpack: chain => {
chain
.plugin('html')
.tap(args => {
args[0].title = packageJson.title
return args
})
// 公共配置
baseConfig(chain, THEME, app)
// 开发环境配置
if (process.env.NODE_ENV !== 'production') {
devConfig(chain, THEME, app)
}
// 生产环境配置
if (process.env.NODE_ENV === 'production') {
prodConfig(chain, THEME, app)
}
// 注入APP名称
if (app) {
chain.plugin('define').tap(opt => {
if (opt[0] && opt[0]['process.env']) {
opt[0]['process.env'].APP = `"${app.name}"`
}
return opt
})
chain.output
.library(`${app.name}-[name]`)
.filename('assets/js/[name].[hash:8].js')
.libraryTarget('umd')
.jsonpFunction(`webpackJsonp_${app.name}`)
}
// 加载用户自定义的chainWebpack
if (config.chainWebpack) {
config.chainWebpack(chain)
}
},
configureWebpack: {
devtool: 'source-map'
}
}