wangbd-myui
Version:
MY前端基础框架核心组件库
131 lines (114 loc) • 3.97 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 CompressionWebpackPlugin = require('compression-webpack-plugin')
const webpack = require('webpack')
// 获取子应用信息
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': '*'
}
},
// 高级的方式
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') {
// 生产环境
config.plugins.push(
new CompressionWebpackPlugin({
filename: '[path].gz[query]',
algorithm: 'gzip',
test: /\.(js)(\?.*)?$/i,
threshold: 10240, // 对超过10k的数据进行压缩
minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
deleteOriginalAssets: false, // 删除原文件
})
);
// 生产环境
config.plugins.push(
new webpack.optimize.LimitChunkCountPlugin({
maxChunks: 10,
minChunkSize: 100
})
);
} else {
// 开发环境
}
},
chainWebpack: chain => {
// 公共配置
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)
}
}
}