tk2312-web/config/webpack.dev.config.js

171 lines
5.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author: liyxt
* @Date: 2019-09-26 09:50:38
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-12-24 15:08:36
* @Description: file content
*/
/**
* 开发环境配置
*/
const OpenBrowserPlugin = require('open-browser-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const webpack = require('webpack');
const path = require('path');
const common = require('./webpack.common');
const merge = require('webpack-merge');
const configJSON = require('../config.json');
const buildEntry = require('./buildEntry');
const port = configJSON.devPort || 3006;
const host = 'localhost';
const fs = require('fs');
const proxyLocation = require('./proxyLocation');
module.exports = function(env, argv) {
let { mode, buildPath, client = 'pc', srcDir = configJSON.srcDir || 'src' } = env;
if (client === 'mobile') {
process.env.PROJECT_CLIENT = 'mobile';
}
buildPath = buildPath || configJSON.buildEntryPath || `./${srcDir}/*/*/*/*/index.js`;
let buildWithoutHTML = configJSON.buildWithoutHTML;
buildWithoutHTML && typeof buildWithoutHTML === 'string' && (buildWithoutHTML = [buildWithoutHTML]);
// 二开相关
let extendBuildEntryPath = configJSON.extendBuildEntryPath || [];
let { entries: extendEntries, plugins: extendPlugins } = buildEntry({
buildPath: extendBuildEntryPath,
buildWithoutHTML,
hash: false,
mode,
client,
fse: true
});
// console.log(extendEntries);
// let { entries = [], plugins = [], externals = [] } = {};
let { entries, plugins, externals, lowCodeEntries, rules } = buildEntry({
buildPath,
buildWithoutHTML,
hash: true,
mode,
client
});
let devConfig = {
mode,
entry: {},
output: {
filename: '[name].js',
path: path.resolve(__dirname, './dist'),
publicPath: '/',
library: '[name]',
libraryTarget: 'umd',
chunkFilename: '[name].js'
},
devtool: 'source-map',
devServer: {
contentBase: path.join(__dirname, `../${srcDir}`),
port, // 端口号
host: '0.0.0.0', // 主机地址
inline: false, // 控制台是否显示构建信息
clientLogLevel: 'error', // 控制台显示什么log信息
open: false, // 开始构建时是否打开浏览器使用OpenBrowserPlugin在构建完成时打开浏览器
hot: true, // 是否启用热替换
lazy: false, // 是否请求时才编译包
historyApiFallback: {
// 404时的页面
rewrites: { from: /./, to: '/404.html' }
},
overlay: {
// 报错时浏览器是否显示错误信息
warnings: true,
errors: true
},
stats: 'errors-only', // 开启报错提示
proxy: {
'/nccloud/resources/spr':{
target: configJSON.proxy,
pathRewrite:{
'^/nccloud/resources/spr':'/spr'
}
},
// 请求代理
'/nccloud': {
target: configJSON.proxy,
bypass: function(req, res){
//使用本地前端资源
if(req.url === "/nccloud/resources/lowcode/light-front/runtime/main/index.html"){
res.redirect(302, "/lowcode/light-front/runtime/main/index.html");
}else if(lowCodeEntries.some(item=>req.url.includes(item))){
let src = req.url;
let index = src.indexOf("nccloud") + 17;
src = src.slice(index);
return src;
}
let isProxy = proxyLocation(req.url, configJSON, 'nccloud')
if(isProxy){
console.log("修改后的请求路径:", req.url.replace('/nccloud/resources', ''))
return req.url.replace('/nccloud/resources', '');
}else{ //没有匹配到 走 home
if(!req.url.includes('nccloud')){
//console.log('/nccloud/resources' + req.url)
res.redirect(302, '/nccloud/resources' + req.url);
//return '/nccloud/resources' + req.url;
}
}
}
},
'/yonbip': {
target: configJSON.proxy,
bypass: function(req, res){
//使用本地前端资源
let isProxy = proxyLocation(req.url, configJSON, 'yonbip')
if(isProxy){
console.log("修改后的请求路径:", req.url.replace('/yonbip/resources', ''))
return req.url.replace('/yonbip/resources', '');
}
// else{ //没有匹配到 走 home
// if(!req.url.includes('yonbip')){
// //console.log('/nccloud/resources' + req.url)
// res.redirect(302, '/yonbip/resources' + req.url);
// //return '/nccloud/resources' + req.url;
// }
// }
}
},
'/spr': {
target: configJSON.proxy
},
}
},
plugins: [
new webpack.DefinePlugin({
NODE_ENV: JSON.stringify(mode),
ISMA: configJSON.isMA,
LOGIN_INFO: JSON.stringify(configJSON.directConnectInfo),
MA_INFO: JSON.stringify(configJSON.maInfo)
}),
new webpack.NamedModulesPlugin(), // 当开启 HMR 的时候使用该插件会显示模块的相对路径
new webpack.HotModuleReplacementPlugin(), // 模块热替换插件
new OpenBrowserPlugin({ url: `http://${host}:${port}/nccloud` }) // 构建完成打开浏览器插件
]
};
// 合并 二开
Object.assign(entries, extendEntries);
Object.assign(common.externals, externals);
//css隔离
if(rules.length){
Object.assign(common.module.rules, rules);
}
Object.assign(devConfig.entry, entries);
devConfig.plugins.push(...plugins);
devConfig = merge(common, devConfig);
return devConfig;
};