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 | 1 | #!/usr/bin/env node |
2 | - | |
3 | -const path = require('path'); | |
4 | -const fs = require('fs'); | |
5 | 2 | const execSync = require('child_process').execSync; |
6 | 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 | 1 | #!/usr/bin/env node |
2 | 2 | |
3 | -const path = require('path'); | |
4 | -const fs = require('fs'); | |
5 | 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 | +}); | ... | ... |