Showing
7 changed files
with
203 additions
and
212 deletions
Too many changes to show.
To preserve performance only 7 of 9 files are displayed.
1 | #!/usr/bin/env node | 1 | #!/usr/bin/env node |
2 | - | ||
3 | -const path = require('path'); | ||
4 | -const fs = require('fs'); | ||
5 | const execSync = require('child_process').execSync; | 2 | const execSync = require('child_process').execSync; |
6 | const chalk = require('chalk'); | 3 | const chalk = require('chalk'); |
7 | -const getConfigContent = require('../config/defaultConfig.js'); | ||
8 | 4 | ||
9 | -const umircCwdFilePath = path.resolve(process.cwd(), '.umirc.js'); | 5 | +const defaultEnv = ['dev', 'prod'] |
6 | +const env = process.argv.slice(2).join(' ') || 'prod' | ||
7 | + | ||
8 | +if (!defaultEnv.includes(env)) { | ||
9 | + console.log(chalk.red('\n 命令不存在')); | ||
10 | + process.exit(1); | ||
11 | +} | ||
10 | 12 | ||
11 | -async function writeFile() { | ||
12 | - const content = await getConfigContent(); | ||
13 | - fs.writeFile(umircCwdFilePath, content, (err) => { | ||
14 | - if (err) { | ||
15 | - console.log(chalk.red(`文件写入失败, ${err}`)); | ||
16 | - process.exit(1); | ||
17 | - } else { | ||
18 | - execSync(`npx cross-env ${process.argv.slice(2).join(' ')} umi build`, { stdio: 'inherit' }); | ||
19 | - fs.unlinkSync(umircCwdFilePath); | ||
20 | - } | ||
21 | - }); | 13 | +if (env === 'prod') { |
14 | + execSync(`npx cross-env NODE_ENV=production webpack build --config ./config/webpack.prod.js`, { stdio: 'inherit' }); | ||
22 | } | 15 | } |
23 | 16 | ||
24 | -writeFile(); | 17 | +if (env === 'dev') { |
18 | + execSync(`npx cross-env NODE_ENV=development webpack build --config ./config/webpack.dev.js`, { stdio: 'inherit' }); | ||
19 | +} |
1 | #!/usr/bin/env node | 1 | #!/usr/bin/env node |
2 | 2 | ||
3 | -const path = require('path'); | ||
4 | -const fs = require('fs'); | ||
5 | const execSync = require('child_process').execSync; | 3 | const execSync = require('child_process').execSync; |
6 | -const chalk = require('chalk'); | ||
7 | -const getConfigContent = require('../config/defaultConfig.js'); | ||
8 | -const { findUsablePort } = require('../utils'); | ||
9 | 4 | ||
10 | -const umircCwdFilePath = path.resolve(process.cwd(), '.umirc.js'); | ||
11 | - | ||
12 | -async function writeFile() { | ||
13 | - const port = await findUsablePort(process.env.PORT || 8000); | ||
14 | - const content = getConfigContent(port); | ||
15 | - | ||
16 | - fs.writeFile(umircCwdFilePath, content, (err) => { | ||
17 | - if (err) { | ||
18 | - console.log(chalk.red(`文件写入失败, ${err}`)); | ||
19 | - process.exit(1); | ||
20 | - } else { | ||
21 | - execSync( | ||
22 | - `npx cross-env ${process.argv | ||
23 | - .slice(2) | ||
24 | - .join(' ')} SOCKET_SERVER=http://localhost:${port} umi dev`, | ||
25 | - { stdio: 'inherit' }, | ||
26 | - ); | ||
27 | - fs.unlinkSync(umircCwdFilePath); | ||
28 | - } | ||
29 | - }); | ||
30 | -} | ||
31 | - | ||
32 | -writeFile(); | 5 | +execSync(`npx cross-env NODE_ENV=development vite --force --config ./config/vite.config.js`, { stdio: 'inherit' }); |
config/defaultConfig.js
deleted
100644 → 0
1 | -const getConfigContent = (port) => { | ||
2 | - return ` | ||
3 | - import { defineConfig } from 'umi'; | ||
4 | - import path from 'path'; | ||
5 | - import fs from 'fs'; | ||
6 | - import MiniCssExtractPlugin from 'mini-css-extract-plugin' | ||
7 | - import routes from './src/routes' | ||
8 | - import pkg from './package.json' | ||
9 | - let userConfig = {}; | ||
10 | - let terserOptions = {}; | ||
11 | - let publicPath = '/' + pkg.name + '/' | ||
12 | - | ||
13 | - if (fs.existsSync(path.resolve(process.cwd(), '.qx.config.js'))) { | ||
14 | - userConfig = require(path.resolve(process.cwd(), '.qx.config.js')) | ||
15 | - } | ||
16 | - | ||
17 | - if (process.env.NODE_ENV === 'development') { | ||
18 | - publicPath = '//localhost:' + ${port} + '/' | ||
19 | - } | ||
20 | - | ||
21 | - if (process.env.UMI_APP_ENV === 'prod') { | ||
22 | - terserOptions = { | ||
23 | - compress: { | ||
24 | - pure_funcs: ['console.log', 'debugger'], | ||
25 | - }, | ||
26 | - }; | ||
27 | - } else { | ||
28 | - terserOptions = { | ||
29 | - compress: { | ||
30 | - drop_debugger: true, | ||
31 | - }, | ||
32 | - }; | ||
33 | - } | ||
34 | - | ||
35 | - export default defineConfig({ | ||
36 | - esbuild: {}, | ||
37 | - devServer: { | ||
38 | - port: ${port}, | ||
39 | - 'Access-Control-Allow-Origin': true | ||
40 | - }, | ||
41 | - runtimePublicPath: true, | ||
42 | - publicPath, | ||
43 | - mountElementId: pkg.name, | ||
44 | - webpack5: { | ||
45 | - lazyCompilation: {}, | ||
46 | - }, | ||
47 | - nodeModulesTransform: { | ||
48 | - type: 'none', | ||
49 | - }, | ||
50 | - history: { | ||
51 | - type: 'hash', | ||
52 | - }, | ||
53 | - alias: { | ||
54 | - '@/src': 'src', | ||
55 | - }, | ||
56 | - hash: true, | ||
57 | - title: false, | ||
58 | - lessLoader: { | ||
59 | - globalVars: { | ||
60 | - theme: 'true;@import "~@/variable.less"', | ||
61 | - }, | ||
62 | - }, | ||
63 | - antd: { | ||
64 | - config: {}, | ||
65 | - }, | ||
66 | - fastRefresh: {}, | ||
67 | - qiankun: { | ||
68 | - slave: {}, | ||
69 | - }, | ||
70 | - dynamicImport: { | ||
71 | - loading: '@/components/qx-page-loading', | ||
72 | - }, | ||
73 | - routes, | ||
74 | - terserOptions, | ||
75 | - chainWebpack: function (memo, { env, webpack, createCSSRule }) { | ||
76 | - memo.resolve.alias.set('@', path.resolve(__dirname, './src')); | ||
77 | - memo.resolve.alias.set('@@', path.resolve(__dirname, './src/.umi')); | ||
78 | - memo.optimization.delete('noEmitOnErrors'); | ||
79 | - memo.plugins.delete('optimize-css'); | ||
80 | - // if (env === 'production') { | ||
81 | - memo.merge({ | ||
82 | - plugins: env === 'production'? [new MiniCssExtractPlugin()] : [], | ||
83 | - optimization: { | ||
84 | - emitOnErrors: true, | ||
85 | - splitChunks: { | ||
86 | - chunks: 'async', | ||
87 | - minSize: 30000, | ||
88 | - minChunks: 3, | ||
89 | - automaticNameDelimiter: '.', | ||
90 | - cacheGroups: { | ||
91 | - antdesigns: { | ||
92 | - name: 'antdesigns', | ||
93 | - chunks: 'all', | ||
94 | - test: /(@antd|antd|@ant-design)/, | ||
95 | - priority: 10 | ||
96 | - }, | ||
97 | - x6: { | ||
98 | - name: 'x6', | ||
99 | - chunks: 'all', | ||
100 | - test: /(@antv\\/x6|@antv\\/x6-react-components|@antv\\/x6-react-shape)/, | ||
101 | - priority: 20, | ||
102 | - }, | ||
103 | - qxwidgets: { | ||
104 | - name: 'qxwidgets', | ||
105 | - chunks: 'all', | ||
106 | - test: /\\/src\\/packages\\/qx-form-generator/, | ||
107 | - priority: 10, | ||
108 | - }, | ||
109 | - formrender: { | ||
110 | - name: 'formrender', | ||
111 | - chunks: 'all', | ||
112 | - test: /@qx\\/form-render/, | ||
113 | - priority: 10, | ||
114 | - }, | ||
115 | - qx: { | ||
116 | - name: 'qx', | ||
117 | - chunks: 'all', | ||
118 | - test: /(@qx\\/view-render|@qx\\/form-design|@qx\\/hooks|@qx\\/utils|@qx\\/icon-btn)/, | ||
119 | - priority: 20, | ||
120 | - }, | ||
121 | - echarts: { | ||
122 | - name: 'echarts', | ||
123 | - chunks: 'all', | ||
124 | - test: /(echarts|echarts-for-react)/, | ||
125 | - priority: 20, | ||
126 | - }, | ||
127 | - // styles: { | ||
128 | - // name: "styles", | ||
129 | - // type: "css/mini-extract", | ||
130 | - // chunks: "all", | ||
131 | - // enforce: true, | ||
132 | - // }, | ||
133 | - vendors: { | ||
134 | - name: 'vendors', | ||
135 | - chunks: 'all', | ||
136 | - test: /[\\/]node_modules[\\/]/, | ||
137 | - priority: 10, | ||
138 | - }, | ||
139 | - }, | ||
140 | - }, | ||
141 | - }, | ||
142 | - externals: function ({ context, request }, callback) { | ||
143 | - if (env === 'production') { | ||
144 | - if (/^react$/.test(request)) { | ||
145 | - return callback(null, 'React', 'react'); | ||
146 | - } | ||
147 | - | ||
148 | - if (/^react-dom$/.test(request)) { | ||
149 | - return callback(null, 'ReactDOM', 'react-dom'); | ||
150 | - } | ||
151 | - } | ||
152 | - | ||
153 | - if (/antd.*.(css|less)$/.test(path.resolve(context, request))) { | ||
154 | - return callback(null, 'antd-style'); | ||
155 | - } | ||
156 | - | ||
157 | - callback(); | ||
158 | - }, | ||
159 | - }); | ||
160 | - // } | ||
161 | - }, | ||
162 | - ...userConfig, | ||
163 | - }); | ||
164 | - `; | ||
165 | -}; | ||
166 | - | ||
167 | -module.exports = getConfigContent; |
config/vite.config.js
0 → 100644
1 | +const { defineConfig } = require('vite'); | ||
2 | +const process = require('process'); | ||
3 | +import { viteExternalsPlugin } from 'vite-plugin-externals'; | ||
4 | +const path = require('path'); | ||
5 | +const { cwd } = require('process'); | ||
6 | + | ||
7 | +module.exports = defineConfig({ | ||
8 | + server: { | ||
9 | + proxy: path.resolve(cwd(), './proxy'), | ||
10 | + }, | ||
11 | + define: { | ||
12 | + // By default, Vite doesn't include shims for NodeJS/ | ||
13 | + // necessary for segment analytics lib to work | ||
14 | + global: {}, | ||
15 | + 'process.env': process.env, | ||
16 | + }, | ||
17 | + resolve: { | ||
18 | + extensions: ['.json', '.jsx', '.js', '.ts', '.tsx'], | ||
19 | + alias: { | ||
20 | + '@': path.resolve(cwd, './src/'), | ||
21 | + '@/src': path.resolve(cwd, './src/'), | ||
22 | + '~@qx': path.resolve(cwd, './node_modules/@qx'), | ||
23 | + }, | ||
24 | + }, | ||
25 | + css: { | ||
26 | + preprocessorOptions: { | ||
27 | + less: { | ||
28 | + javascriptEnabled: true, | ||
29 | + additionalData: `@import '@/styles/variable.less';`, | ||
30 | + }, | ||
31 | + }, | ||
32 | + }, | ||
33 | + plugins: [ | ||
34 | + new viteExternalsPlugin({ | ||
35 | + react: 'React', | ||
36 | + 'react-dom': 'ReactDOM', | ||
37 | + dayjs: 'dayjs', | ||
38 | + antd: 'antd', | ||
39 | + }), | ||
40 | + ], | ||
41 | +}); |
config/webpack.base.js
0 → 100644
1 | +const CopyPlugin = require('copy-webpack-plugin'); | ||
2 | +const HtmlWebpackPlugin = require('html-webpack-plugin'); | ||
3 | +const WebpackBar = require('webpackbar'); | ||
4 | +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); | ||
5 | +const NodePolyfillPlugin = require('node-polyfill-webpack-plugin'); | ||
6 | + | ||
7 | +const process = require('process'); | ||
8 | +const path = require('path'); | ||
9 | + | ||
10 | +const cwd = process.cwd(); | ||
11 | + | ||
12 | +module.exports = { | ||
13 | + output: { | ||
14 | + filename: './js/[name]-[contenthash].js', | ||
15 | + libraryTarget: 'umd', | ||
16 | + clean: true, | ||
17 | + }, | ||
18 | + entry: path.resolve(cwd, './src/index.tsx'), | ||
19 | + module: { | ||
20 | + rules: [ | ||
21 | + { | ||
22 | + test: /\.(js|jsx|ts|tsx)$/, | ||
23 | + exclude: /node_modules/, | ||
24 | + use: [ | ||
25 | + 'thread-loader', | ||
26 | + { | ||
27 | + loader: 'babel-loader', | ||
28 | + options: { | ||
29 | + presets: [ | ||
30 | + '@babel/preset-env', | ||
31 | + '@babel/preset-react', | ||
32 | + '@babel/preset-typescript', | ||
33 | + ], | ||
34 | + }, | ||
35 | + }, | ||
36 | + ], | ||
37 | + }, | ||
38 | + { | ||
39 | + test: /\.(png|jpeg|jpg)(\?[a-z0-9=&.]+)?$/, | ||
40 | + use: { | ||
41 | + loader: 'file-loader', | ||
42 | + options: { | ||
43 | + name: './public/imgs/[name].[ext]', | ||
44 | + }, | ||
45 | + }, | ||
46 | + }, | ||
47 | + { | ||
48 | + test: /\.(ttf|eot|woff(2)?)(\?[a-z0-9=&.]+)?$/, | ||
49 | + use: { | ||
50 | + loader: 'file-loader', | ||
51 | + options: { | ||
52 | + name: './public/fonts/[name].[ext]', | ||
53 | + }, | ||
54 | + }, | ||
55 | + }, | ||
56 | + { | ||
57 | + test: /\.less$/i, | ||
58 | + use: [ | ||
59 | + MiniCssExtractPlugin.loader, | ||
60 | + 'css-loader', | ||
61 | + { | ||
62 | + loader: 'less-loader', | ||
63 | + options: { | ||
64 | + additionalData: `@import '@/styles/variable.less';`, | ||
65 | + }, | ||
66 | + }, | ||
67 | + ], | ||
68 | + }, | ||
69 | + | ||
70 | + { | ||
71 | + test: /\.css$/i, | ||
72 | + use: [MiniCssExtractPlugin.loader, 'css-loader'], | ||
73 | + }, | ||
74 | + { | ||
75 | + test: /\.svg$/, | ||
76 | + use: ['@svgr/webpack', 'url-loader'], | ||
77 | + }, | ||
78 | + ], | ||
79 | + }, | ||
80 | + resolve: { | ||
81 | + extensions: ['.json', '.jsx', '.js', '.ts', '.tsx'], | ||
82 | + alias: { | ||
83 | + '@': path.resolve(cwd, './src/'), | ||
84 | + '@/src': path.resolve(cwd, './src/'), | ||
85 | + }, | ||
86 | + }, | ||
87 | + plugins: [ | ||
88 | + new HtmlWebpackPlugin({ | ||
89 | + template: path.resolve(cwd, './src/public/index.html'), | ||
90 | + }), | ||
91 | + new CopyPlugin({ | ||
92 | + patterns: [ | ||
93 | + { | ||
94 | + from: path.resolve(cwd, './static'), | ||
95 | + to: 'static', | ||
96 | + }, | ||
97 | + ], | ||
98 | + }), | ||
99 | + new WebpackBar(), | ||
100 | + new NodePolyfillPlugin() | ||
101 | + ], | ||
102 | +}; |
config/webpack.dev.js
0 → 100644
1 | +const { merge } = require('webpack-merge'); | ||
2 | +const baseConfig = require('./webpack.base'); | ||
3 | +const path = require('path'); | ||
4 | +const { cwd } = require('process'); | ||
5 | + | ||
6 | +module.exports = merge(baseConfig, { | ||
7 | + mode: 'development', | ||
8 | + devServer: { | ||
9 | + hot: false, | ||
10 | + headers: { | ||
11 | + 'Access-Control-Allow-Origin': '*', | ||
12 | + }, | ||
13 | + proxy: path.resolve(cwd(), './proxy'), | ||
14 | + }, | ||
15 | + externals: {}, | ||
16 | +}); |
config/webpack.prod.js
0 → 100644
1 | +const { merge } = require('webpack-merge'); | ||
2 | +const baseConfig = require('./webpack.base'); | ||
3 | +const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin'); | ||
4 | +const TerserPlugin = require('terser-webpack-plugin'); | ||
5 | +const CompressionWebpackPlugin = require('compression-webpack-plugin'); | ||
6 | +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); | ||
7 | + | ||
8 | +module.exports = merge(baseConfig, { | ||
9 | + mode: 'production', | ||
10 | + externals: { | ||
11 | + react: 'React', | ||
12 | + 'react-dom': 'ReactDOM', | ||
13 | + 'dayjs': 'dayjs', | ||
14 | + 'antd': 'antd', | ||
15 | + }, | ||
16 | + optimization: { | ||
17 | + minimize: true, | ||
18 | + minimizer: [ | ||
19 | + new CompressionWebpackPlugin(), | ||
20 | + new TerserPlugin({ | ||
21 | + extractComments: false, | ||
22 | + test: /\.js(\?.*)?$/i, | ||
23 | + exclude: /node_modules/, | ||
24 | + }), | ||
25 | + new MiniCssExtractPlugin({ | ||
26 | + filename: './styles/[name]-[contenthash].css', | ||
27 | + }), | ||
28 | + new CssMinimizerWebpackPlugin(), | ||
29 | + ], | ||
30 | + }, | ||
31 | +}); |