Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

After compiling with Vite, drag-and-drop doesn't work, but it works with rspack. #281

Open
jongwong opened this issue Nov 6, 2024 · 0 comments

Comments

@jongwong
Copy link

jongwong commented Nov 6, 2024

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
import monacoEditorPlugin from 'vite-plugin-monaco-editor';
// 可选:自定义 Babel 插件
const babel = require('@rollup/plugin-babel');
import Buffer from 'buffer';
import * as fs from 'fs';

function rawTxtPlugin() {
	return {
		name: 'vite-plugin-raw-txt',
		transform(src, id) {
			if (id.endsWith('.txt')) {
				const filePath = path.resolve(id);
				const content = fs.readFileSync(filePath, 'utf-8');
				return {
					code: `export default ${JSON.stringify(content)}`,
					map: null, // 如果需要源映射,可以生成源映射
				};
			}
		},
	};
}

export default defineConfig({
	mode: 'development',
	optimizeDeps: {
		include: ['react-arborist'], // 替换成依赖的包名
	},

	server: {
		port: 3000,
		host: '0.0.0.0',
		proxy: {
			// Proxy all requests starting with `/api` to `http://localhost:5000`
			'/preview': {
				target: 'http://localhost:3001',
				changeOrigin: true, // Change the origin to match the target server
				rewrite: path => path,
			},
			'/api': {
				target: 'http://localhost:3001',
				changeOrigin: true, // Change the origin to match the target server
				rewrite: path => path.replace(/^\/api/, ''),
			},
		},
	},

	plugins: [
		react(), // 代替 ReactRefreshWebpackPlugin
		monacoEditorPlugin({
			// 代替 MonacoWebpackPlugin
			languageWorkers: ['editorWorkerService', 'typescript'],
		}),
		rawTxtPlugin(),
	],
	resolve: {
		alias: {
			'@': path.resolve(__dirname, './src'),
			'@containers': path.resolve(__dirname, './src/containers'),
			'@public': path.resolve(__dirname, './public'),
		},
	},
	css: {
		preprocessorOptions: {
			less: {
				javascriptEnabled: true, // 支持 JS
			},
		},
	},
	build: {
		outDir: 'dist',
		assetsDir: 'static', // 资源文件目录
		rollupOptions: {
			output: {
				assetFileNames: 'static/[name].[hash][extname]',
				chunkFileNames: 'static/js/[name].[hash].js',
				entryFileNames: 'static/js/[name].[hash].js',
			},
		},
		commonjsOptions: {
			include: [/node_modules\/react-arborist/], // 强制将 node_modules 里的依赖转换为 ESM
		},
	},
	define: {
		// 如果需要使用 process.env 变量,可以在这里添加
		'process.env': JSON.stringify(process.env),
		global: {},
		Buffer: Buffer, // 提供 Buffer
	},
});

import { defineConfig } from '@rspack/cli';
import { DefinePlugin, ProvidePlugin, rspack } from '@rspack/core';
import * as RefreshPlugin from '@rspack/plugin-react-refresh';
import * as path from 'path';

const { ModuleFederationPlugin } = require('@module-federation/enhanced/rspack');
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');

const isDev = process.env.NODE_ENV === 'development';
// Target browsers, see: https://github.com/browserslist/browserslist
const targets = ['chrome >= 87', 'edge >= 88', 'firefox >= 78', 'safari >= 14'];

export default defineConfig({
	context: __dirname,
	entry: {
		main: './src/index.tsx',
	},
	stats: {
		warnings: false, // 禁止显示警告
	},
	experiments: {
		css: true,
	},
	output: {
		globalObject: 'self',
		filename: '[name].bundle.js',
		path: path.resolve(__dirname, 'dist'),
	},
	externals: {
		LowCodeDragItem: 'LowCodeDragItem',
		LowCodeItemContainer: 'LowCodeItemContainer',
	},
	resolve: {
		extensions: ['.js', '.tsx', '.ts', '.json', '.css', '.less'],
		alias: {
			'@': path.resolve(__dirname, 'src'),
			src: path.resolve(__dirname, 'src'),
			'@containers': path.resolve(__dirname, 'src/containers'),
			'@public': path.resolve(__dirname, 'public'),
			'worker-loader': require.resolve('worker-rspack-loader'),
		},
	},
	module: {
		parser: {
			'css/auto': {
				namedExports: false,
				auto: true,
				localIdentName: '[name]__[local]___[hash:base64:5]',
			},
		},
		rules: [
			{
				test: /\.ttf$/,
				use: ['file-loader'],
			},
			{
				test: /\.svg$/,
				type: 'asset',
			},
			{
				test: /\.txt$/,
				use: [
					{
						loader: 'raw-loader',
					},
				],
			},
			{
				test: /\.(jsx?|tsx?)$/,
				use: [
					{
						loader: 'builtin:swc-loader',
						options: {
							jsc: {
								parser: {
									syntax: 'typescript',
									tsx: true,
								},
								transform: {
									react: {
										runtime: 'automatic',
										development: isDev,
										refresh: isDev,
									},
								},
							},
							env: { targets },
						},
					},
				],
			},
			{
				test: /\.module\.(less|css)$/,
				type: 'css/auto', // 👈
				use: ['less-loader'],
			},
			{
				test: /\.less$/,
				type: 'css/auto', // 👈
				use: ['less-loader'],
			},
		],
	},
	plugins: [
		new rspack.HtmlRspackPlugin({
			template: './public/index.html',
		}),

		new ProvidePlugin({
			process: [require.resolve('process/browser')],
			Buffer: ['buffer', 'Buffer'],
		}),
		new MonacoWebpackPlugin({
			languages: ['typescript', 'javascript', 'json'],
			globalAPI: true,
		}),
		isDev ? new RefreshPlugin() : null,
	].filter(Boolean),
	optimization: {
		minimizer: [
			new rspack.SwcJsMinimizerRspackPlugin(),
			new rspack.LightningCssMinimizerRspackPlugin({
				minimizerOptions: { targets },
			}),
		],
	},
	devServer: {
		port: 3000,
		hot: true,
		liveReload: true,
		proxy: [
			{
				context: ['/preview'], // 代理路径
				target: 'http://localhost:3001',
				changeOrigin: true, // 修改请求头中的 Origin
			},
			{
				context: ['/api'], // 代理路径
				target: 'http://localhost:3001',
				changeOrigin: true, // 修改请求头中的 Origin
				pathRewrite: { '^/api': '' }, // 重写路径,将 `/api` 替换为空字符串
			},
		],
		historyApiFallback: true,
	},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant