1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci// Generated using webpack-cli https://github.com/webpack/webpack-cli 16fb726d48Sopenharmony_ci 17fb726d48Sopenharmony_ciconst path = require('path'); 18fb726d48Sopenharmony_ciconst { CleanWebpackPlugin } = require('clean-webpack-plugin'); 19fb726d48Sopenharmony_ciconst HtmlWebpackPlugin = require('html-webpack-plugin'); 20fb726d48Sopenharmony_ciconst MiniCssExtractPlugin = require('mini-css-extract-plugin'); 21fb726d48Sopenharmony_ciconst isProduction = process.env.NODE_ENV === 'production'; 22fb726d48Sopenharmony_ciconst CopyWebpackPlugin = require('copy-webpack-plugin'); 23fb726d48Sopenharmony_ciconst os = require('os'); 24fb726d48Sopenharmony_ciconst childProcess = require('child_process'); 25fb726d48Sopenharmony_ciconst { exec } = require('child_process'); 26fb726d48Sopenharmony_ciconst fs = require('fs'); 27fb726d48Sopenharmony_ci 28fb726d48Sopenharmony_ciconst supportPlatform = ['windows', 'linux', 'darwin']; 29fb726d48Sopenharmony_ci 30fb726d48Sopenharmony_cifunction runCommand(command) { 31fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 32fb726d48Sopenharmony_ci exec(command, (error, stdout, stderr) => { 33fb726d48Sopenharmony_ci if (error) { 34fb726d48Sopenharmony_ci reject(error); 35fb726d48Sopenharmony_ci } else { 36fb726d48Sopenharmony_ci resolve(stdout); 37fb726d48Sopenharmony_ci } 38fb726d48Sopenharmony_ci }); 39fb726d48Sopenharmony_ci }); 40fb726d48Sopenharmony_ci} 41fb726d48Sopenharmony_ci 42fb726d48Sopenharmony_cifunction cpFile(sourcePath, targetPath) { 43fb726d48Sopenharmony_ci fs.readdir(sourcePath, (err, files) => { 44fb726d48Sopenharmony_ci if (err) { 45fb726d48Sopenharmony_ci console.error('无法读取目录', err); 46fb726d48Sopenharmony_ci return; 47fb726d48Sopenharmony_ci } 48fb726d48Sopenharmony_ci files.forEach((file) => { 49fb726d48Sopenharmony_ci const source = `${sourcePath}/${file}`; 50fb726d48Sopenharmony_ci const target = `${targetPath}/${file}`; 51fb726d48Sopenharmony_ci if (fs.lstatSync(source).isFile()) { 52fb726d48Sopenharmony_ci fs.copyFile(source, target, (err) => { 53fb726d48Sopenharmony_ci if (err) { 54fb726d48Sopenharmony_ci console.error('无法复制文件', err); 55fb726d48Sopenharmony_ci return; 56fb726d48Sopenharmony_ci } 57fb726d48Sopenharmony_ci }); 58fb726d48Sopenharmony_ci } 59fb726d48Sopenharmony_ci }); 60fb726d48Sopenharmony_ci }); 61fb726d48Sopenharmony_ci} 62fb726d48Sopenharmony_ci 63fb726d48Sopenharmony_cifunction clearDirectory(directoryPath) { 64fb726d48Sopenharmony_ci const isDirectoryExists = fs.existsSync(directoryPath); 65fb726d48Sopenharmony_ci 66fb726d48Sopenharmony_ci if (!isDirectoryExists) { 67fb726d48Sopenharmony_ci fs.mkdirSync(directoryPath); 68fb726d48Sopenharmony_ci } else { 69fb726d48Sopenharmony_ci fs.readdirSync(directoryPath).forEach((file) => { 70fb726d48Sopenharmony_ci const filePath = path.join(directoryPath, file); 71fb726d48Sopenharmony_ci if (fs.lstatSync(filePath).isDirectory()) { 72fb726d48Sopenharmony_ci return; 73fb726d48Sopenharmony_ci } else { 74fb726d48Sopenharmony_ci try { 75fb726d48Sopenharmony_ci fs.unlinkSync(filePath); // 删除文件 76fb726d48Sopenharmony_ci } catch { 77fb726d48Sopenharmony_ci console.log(`can't del file ${filePath}`); 78fb726d48Sopenharmony_ci } 79fb726d48Sopenharmony_ci } 80fb726d48Sopenharmony_ci }); 81fb726d48Sopenharmony_ci } 82fb726d48Sopenharmony_ci} 83fb726d48Sopenharmony_ci 84fb726d48Sopenharmony_cifunction buildMultiPlatform() { 85fb726d48Sopenharmony_ci const outPath = path.normalize(path.join(__dirname, '/', 'dist')); 86fb726d48Sopenharmony_ci const serverSrc = path.normalize(path.join(__dirname, '/server/main.go')); 87fb726d48Sopenharmony_ci for (const platform of supportPlatform) { 88fb726d48Sopenharmony_ci const generateFile = platform === 'windows' ? 89fb726d48Sopenharmony_ci path.normalize(path.join(outPath, '/', `main.exe`)) : 90fb726d48Sopenharmony_ci path.normalize(path.join(outPath, '/', `main_${platform}`)); 91fb726d48Sopenharmony_ci const setEnv = `go env -w CGO_ENABLED=0 && go env -w GOOS=${platform} && go env -w GOARCH=amd64`; 92fb726d48Sopenharmony_ci const buildCmd = `${setEnv} && go build -o ${generateFile} ${serverSrc}`; 93fb726d48Sopenharmony_ci console.log(`compile ${platform} server ...`); 94fb726d48Sopenharmony_ci childProcess.execSync(buildCmd); 95fb726d48Sopenharmony_ci } 96fb726d48Sopenharmony_ci} 97fb726d48Sopenharmony_ci 98fb726d48Sopenharmony_ciconst stylesHandler = isProduction ? MiniCssExtractPlugin.loader : 'style-loader'; 99fb726d48Sopenharmony_ci//compile server 100fb726d48Sopenharmony_ci((flag) => { 101fb726d48Sopenharmony_ci if (!flag) { 102fb726d48Sopenharmony_ci return; 103fb726d48Sopenharmony_ci } 104fb726d48Sopenharmony_ci console.log('start compile server'); 105fb726d48Sopenharmony_ci let outPath = path.normalize(path.join(__dirname, '/', 'dist')); 106fb726d48Sopenharmony_ci let binPath = path.normalize(path.join(__dirname, '/', 'bin')); 107fb726d48Sopenharmony_ci clearDirectory(outPath); 108fb726d48Sopenharmony_ci cpFile(binPath, outPath); 109fb726d48Sopenharmony_ci const protoPath = './src/trace/proto/'; 110fb726d48Sopenharmony_ci runCommand(`pbjs -t static-module -w commonjs -o ${protoPath}SphBaseData.js ${protoPath}SphBaseData.proto`); 111fb726d48Sopenharmony_ci buildMultiPlatform(); 112fb726d48Sopenharmony_ci})(true); 113fb726d48Sopenharmony_ciconst config = { 114fb726d48Sopenharmony_ci entry: './src/index.ts', 115fb726d48Sopenharmony_ci output: { 116fb726d48Sopenharmony_ci path: path.resolve(__dirname, 'dist'), 117fb726d48Sopenharmony_ci filename: '[name].[chunkhash].bundle.js', 118fb726d48Sopenharmony_ci clean: false, 119fb726d48Sopenharmony_ci }, 120fb726d48Sopenharmony_ci devServer: { 121fb726d48Sopenharmony_ci open: true, 122fb726d48Sopenharmony_ci host: 'localhost', 123fb726d48Sopenharmony_ci }, 124fb726d48Sopenharmony_ci plugins: [ 125fb726d48Sopenharmony_ci new HtmlWebpackPlugin({ 126fb726d48Sopenharmony_ci template: 'index.html', 127fb726d48Sopenharmony_ci }), 128fb726d48Sopenharmony_ci new CleanWebpackPlugin({ 129fb726d48Sopenharmony_ci verbose: true, 130fb726d48Sopenharmony_ci cleanOnceBeforeBuildPatterns: ['!main'], 131fb726d48Sopenharmony_ci }), 132fb726d48Sopenharmony_ci new CopyWebpackPlugin({ 133fb726d48Sopenharmony_ci patterns: [ 134fb726d48Sopenharmony_ci { 135fb726d48Sopenharmony_ci from: './src/figures', 136fb726d48Sopenharmony_ci to: 'figures', 137fb726d48Sopenharmony_ci }, 138fb726d48Sopenharmony_ci { 139fb726d48Sopenharmony_ci from: './src/img', 140fb726d48Sopenharmony_ci to: 'img', 141fb726d48Sopenharmony_ci }, 142fb726d48Sopenharmony_ci { 143fb726d48Sopenharmony_ci from: './src/doc', 144fb726d48Sopenharmony_ci to: 'doc', 145fb726d48Sopenharmony_ci }, 146fb726d48Sopenharmony_ci { 147fb726d48Sopenharmony_ci from: './src/base-ui/icon.svg', 148fb726d48Sopenharmony_ci to: 'base-ui/icon.svg', 149fb726d48Sopenharmony_ci }, 150fb726d48Sopenharmony_ci { 151fb726d48Sopenharmony_ci from: './src/trace/config/custom_temp_config.json', 152fb726d48Sopenharmony_ci to: 'trace/config/custom_temp_config.json', 153fb726d48Sopenharmony_ci }, 154fb726d48Sopenharmony_ci { 155fb726d48Sopenharmony_ci from: './third-party/sql-wasm.js', 156fb726d48Sopenharmony_ci to: 'sql-wasm.js', 157fb726d48Sopenharmony_ci }, 158fb726d48Sopenharmony_ci { 159fb726d48Sopenharmony_ci from: './third-party/sql-wasm.wasm', 160fb726d48Sopenharmony_ci to: 'sql-wasm.wasm', 161fb726d48Sopenharmony_ci }, 162fb726d48Sopenharmony_ci { 163fb726d48Sopenharmony_ci from: './server/version.txt', 164fb726d48Sopenharmony_ci to: 'version.txt', 165fb726d48Sopenharmony_ci }, 166fb726d48Sopenharmony_ci { 167fb726d48Sopenharmony_ci from: './server/wasm.json', 168fb726d48Sopenharmony_ci to: 'wasm.json', 169fb726d48Sopenharmony_ci }, 170fb726d48Sopenharmony_ci { 171fb726d48Sopenharmony_ci from: './server/server-config.json', 172fb726d48Sopenharmony_ci to: 'server-config.json', 173fb726d48Sopenharmony_ci }, 174fb726d48Sopenharmony_ci ], 175fb726d48Sopenharmony_ci }), 176fb726d48Sopenharmony_ci // Add your plugins here 177fb726d48Sopenharmony_ci // Learn more about plugins from https://webpack.js.org/configuration/plugins/ 178fb726d48Sopenharmony_ci ], 179fb726d48Sopenharmony_ci module: { 180fb726d48Sopenharmony_ci rules: [ 181fb726d48Sopenharmony_ci { 182fb726d48Sopenharmony_ci test: /\.(ts|tsx)$/i, 183fb726d48Sopenharmony_ci loader: 'ts-loader', 184fb726d48Sopenharmony_ci exclude: ['/node_modules/'], 185fb726d48Sopenharmony_ci }, 186fb726d48Sopenharmony_ci { 187fb726d48Sopenharmony_ci test: /\.css$/i, 188fb726d48Sopenharmony_ci use: [stylesHandler, 'css-loader', 'postcss-loader'], 189fb726d48Sopenharmony_ci }, 190fb726d48Sopenharmony_ci { 191fb726d48Sopenharmony_ci test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i, 192fb726d48Sopenharmony_ci type: 'asset', 193fb726d48Sopenharmony_ci }, 194fb726d48Sopenharmony_ci 195fb726d48Sopenharmony_ci // Add your rules for custom modules here 196fb726d48Sopenharmony_ci // Learn more about loaders from https://webpack.js.org/loaders/ 197fb726d48Sopenharmony_ci ], 198fb726d48Sopenharmony_ci }, 199fb726d48Sopenharmony_ci resolve: { 200fb726d48Sopenharmony_ci extensions: ['.tsx', '.ts', '.jsx', '.js', '...'], 201fb726d48Sopenharmony_ci fallback: { 202fb726d48Sopenharmony_ci fs: false, 203fb726d48Sopenharmony_ci tls: false, 204fb726d48Sopenharmony_ci net: false, 205fb726d48Sopenharmony_ci zlib: false, 206fb726d48Sopenharmony_ci http: false, 207fb726d48Sopenharmony_ci https: false, 208fb726d48Sopenharmony_ci stream: false, 209fb726d48Sopenharmony_ci crypto: false, 210fb726d48Sopenharmony_ci path: false, //if you want to use this module also don't forget npm i crypto-browserify 211fb726d48Sopenharmony_ci }, 212fb726d48Sopenharmony_ci }, 213fb726d48Sopenharmony_ci}; 214fb726d48Sopenharmony_ci 215fb726d48Sopenharmony_cimodule.exports = () => { 216fb726d48Sopenharmony_ci if (isProduction) { 217fb726d48Sopenharmony_ci config.mode = 'production'; 218fb726d48Sopenharmony_ci 219fb726d48Sopenharmony_ci config.plugins.push(new MiniCssExtractPlugin()); 220fb726d48Sopenharmony_ci } else { 221fb726d48Sopenharmony_ci config.mode = 'development'; 222fb726d48Sopenharmony_ci } 223fb726d48Sopenharmony_ci return config; 224fb726d48Sopenharmony_ci}; 225