171 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/*
 | 
						||
 * @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;
 | 
						||
};
 |