@vixoniccom/module-packager 2.10.2-test.5 → 2.10.2-test.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/371.bundle.js +433 -0
- package/dist/build/676.bundle.js +693 -0
- package/dist/build/index.html +73 -0
- package/dist/build/main.bundle.js +419356 -0
- package/dist/electron.js +68 -0
- package/dist/main.js +109 -83
- package/dist/webpack.config.js +140 -108
- package/index.html +73 -52
- package/package.json +25 -20
package/dist/electron.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { app, BrowserWindow } from 'electron';
|
|
3
|
+
import remoteMain from '@electron/remote/main/index.js';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import commandLineArgs from 'command-line-args';
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
const optionDefinitions = [
|
|
11
|
+
{ name: 'externals', type: String, defaultValue: [], multiple: true },
|
|
12
|
+
{ name: 'src', type: String, defaultValue: path.join(__dirname, 'src') },
|
|
13
|
+
{ name: 'build', type: String, defaultValue: path.join(__dirname, 'build') },
|
|
14
|
+
{ name: 'config', type: String, defaultValue: './webpack.config.js' },
|
|
15
|
+
{ name: 'port', type: Number, defaultValue: 8080 },
|
|
16
|
+
{ name: 'mode', type: String, defaultValue: 'run' }
|
|
17
|
+
];
|
|
18
|
+
const options = commandLineArgs(optionDefinitions);
|
|
19
|
+
console.log('🚀 [ELECTRON] options:', options);
|
|
20
|
+
if (options.mode === 'watch') {
|
|
21
|
+
(await import('electron-debug')).default({ showDevTools: true });
|
|
22
|
+
}
|
|
23
|
+
remoteMain.initialize();
|
|
24
|
+
let mainWindow = null;
|
|
25
|
+
function createWindow() {
|
|
26
|
+
console.log('[ELECTRON] Creating BrowserWindow…');
|
|
27
|
+
mainWindow = new BrowserWindow({
|
|
28
|
+
show: false,
|
|
29
|
+
x: 100,
|
|
30
|
+
y: 100,
|
|
31
|
+
width: 1024,
|
|
32
|
+
height: 768,
|
|
33
|
+
webPreferences: {
|
|
34
|
+
preload: path.join(__dirname, 'preload.js'),
|
|
35
|
+
nodeIntegrationInSubFrames: true,
|
|
36
|
+
nodeIntegration: true,
|
|
37
|
+
contextIsolation: false,
|
|
38
|
+
webSecurity: false,
|
|
39
|
+
webviewTag: true
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
remoteMain.enable(mainWindow.webContents);
|
|
43
|
+
const devUrl = `http://localhost:${options.port}/index.html`;
|
|
44
|
+
const fileUrl = `file://${path.join(options.build, 'index.html')}`;
|
|
45
|
+
console.log('[ELECTRON] build dir:', options.build);
|
|
46
|
+
console.log('[ELECTRON] index.html exists?', fs.existsSync(path.join(options.build, 'index.html')));
|
|
47
|
+
const url = options.mode === 'watch' ? devUrl : fileUrl;
|
|
48
|
+
console.log('[ELECTRON] Loading URL:', url);
|
|
49
|
+
console.log('[ELECTRON] Loading URL:', url);
|
|
50
|
+
mainWindow.loadURL(url);
|
|
51
|
+
mainWindow.webContents.once('did-finish-load', () => {
|
|
52
|
+
console.log('[ELECTRON] did-finish-load → show()');
|
|
53
|
+
mainWindow?.show();
|
|
54
|
+
mainWindow?.webContents.send('init', options);
|
|
55
|
+
});
|
|
56
|
+
mainWindow.on('closed', () => (mainWindow = null));
|
|
57
|
+
// mainWindow.webContents.openDevTools({ mode: 'detach' });
|
|
58
|
+
}
|
|
59
|
+
app.whenReady().then(() => {
|
|
60
|
+
console.log('[ELECTRON] App is ready');
|
|
61
|
+
createWindow();
|
|
62
|
+
app.on('activate', () => {
|
|
63
|
+
if (BrowserWindow.getAllWindows().length === 0) {
|
|
64
|
+
createWindow();
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
app.on('window-all-closed', () => app.quit());
|
package/dist/main.js
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict';
|
|
3
|
-
|
|
3
|
+
import commandLineArgs from 'command-line-args';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import webpack from 'webpack';
|
|
6
|
+
import WebpackDevServer from 'webpack-dev-server';
|
|
7
|
+
import { spawn, exec } from 'child_process';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import archiver from 'archiver';
|
|
11
|
+
import clc from 'cli-color';
|
|
12
|
+
import { Configuration } from '@vixoniccom/modules';
|
|
13
|
+
import tsNode from 'ts-node';
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = path.dirname(__filename);
|
|
16
|
+
const electronPath = path.join(__dirname, 'electron.js');
|
|
17
|
+
// import pjson from '../package.json' assert { type: 'json' }
|
|
18
|
+
// console.log(`VIXONIC PACKAGER: Version ${pjson.version}`)
|
|
4
19
|
const optionDefinitions = [
|
|
5
20
|
{ name: 'externals', type: String, defaultValue: [], multiple: true },
|
|
6
21
|
{ name: 'target', type: String, defaultValue: 'web' },
|
|
@@ -14,22 +29,11 @@ const optionDefinitions = [
|
|
|
14
29
|
{ name: 'tsOverride', type: Boolean }
|
|
15
30
|
];
|
|
16
31
|
const options = commandLineArgs(optionDefinitions);
|
|
17
|
-
const path = require('path');
|
|
18
|
-
const webpack = require('webpack');
|
|
19
|
-
const WebpackDevServer = require('webpack-dev-server');
|
|
20
|
-
const { exec } = require('child_process');
|
|
21
|
-
const electronPath = path.resolve(__dirname, '..', 'electron.js');
|
|
22
|
-
const fs = require('fs');
|
|
23
|
-
const archiver = require('archiver');
|
|
24
|
-
const clc = require('cli-color');
|
|
25
|
-
const pjson = require(path.resolve(__dirname, '../package.json'));
|
|
26
|
-
console.log(`VIXONIC PACKAGER: Version ${pjson.version}`);
|
|
27
32
|
if (options.target !== 'electron-renderer' && options.externals.length > 0) {
|
|
28
33
|
throw new Error(`Can't use external dependencies if target is not electron-renderer.`);
|
|
29
34
|
}
|
|
30
35
|
if (options.mode === 'build') {
|
|
31
36
|
pack(() => {
|
|
32
|
-
// Install externals only if not web.
|
|
33
37
|
if (options.target === 'electron-renderer') {
|
|
34
38
|
installExternals(() => {
|
|
35
39
|
zip();
|
|
@@ -41,6 +45,7 @@ if (options.mode === 'build') {
|
|
|
41
45
|
});
|
|
42
46
|
}
|
|
43
47
|
else if (options.mode === 'watch') {
|
|
48
|
+
console.log('[DEBUG] Entrando a watch()');
|
|
44
49
|
watch();
|
|
45
50
|
}
|
|
46
51
|
else if (options.mode === 'run') {
|
|
@@ -52,50 +57,75 @@ else if (options.mode === 'generate-configuration') {
|
|
|
52
57
|
else if (options.mode === 'validate-configuration') {
|
|
53
58
|
validateConfiguration();
|
|
54
59
|
}
|
|
55
|
-
function
|
|
60
|
+
function runElectron() {
|
|
61
|
+
const electronProcess = spawn('npx', [
|
|
62
|
+
'electron',
|
|
63
|
+
electronPath,
|
|
64
|
+
'--src', path.resolve(options.src),
|
|
65
|
+
'--build', path.resolve(options.build),
|
|
66
|
+
'--port', `${options.port}`,
|
|
67
|
+
'--mode', options.mode,
|
|
68
|
+
'--config', options.config,
|
|
69
|
+
'--externals', options.externals.join(',')
|
|
70
|
+
], {
|
|
71
|
+
cwd: __dirname,
|
|
72
|
+
env: { ...process.env, NODE_ENV: 'development' },
|
|
73
|
+
stdio: 'inherit'
|
|
74
|
+
});
|
|
75
|
+
electronProcess.on('close', (code) => {
|
|
76
|
+
console.log(`Electron process exited with code ${code}`);
|
|
77
|
+
if (code !== 0) {
|
|
78
|
+
console.error('Electron process exited with an error.');
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
async function pack(callback) {
|
|
56
83
|
console.log(clc.blue('Building module...'));
|
|
57
84
|
validateConfiguration();
|
|
58
85
|
const configPath = path.resolve(__dirname, '../', options.config);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (err.errors) {
|
|
67
|
-
console.error('TS Errors:', JSON.stringify(err.errors, null, 2));
|
|
68
|
-
}
|
|
69
|
-
throw err;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
if (stats.hasErrors()) {
|
|
73
|
-
// Imprime los errores de Webpack de forma legible
|
|
74
|
-
const info = stats.toJson('errors-only');
|
|
75
|
-
console.error(clc.red('Webpack errors:'));
|
|
76
|
-
if (info.errors && info.errors.length) {
|
|
77
|
-
info.errors.forEach((e) => {
|
|
78
|
-
console.error(clc.red(typeof e === 'object' ? JSON.stringify(e, null, 2) : e));
|
|
79
|
-
});
|
|
86
|
+
try {
|
|
87
|
+
const webpackConfig = (await import(configPath)).default(options);
|
|
88
|
+
webpack(webpackConfig, function (err, stats) {
|
|
89
|
+
if (err) {
|
|
90
|
+
console.error('Build error:', err);
|
|
91
|
+
if (err.details) {
|
|
92
|
+
console.error('Details:', err.details);
|
|
80
93
|
}
|
|
81
|
-
|
|
82
|
-
console.error(
|
|
94
|
+
if (err.errors) {
|
|
95
|
+
console.error('TS Errors:', JSON.stringify(err.errors, null, 2));
|
|
83
96
|
}
|
|
84
|
-
|
|
97
|
+
throw err;
|
|
85
98
|
}
|
|
86
99
|
else {
|
|
87
|
-
|
|
88
|
-
|
|
100
|
+
if (stats.hasErrors()) {
|
|
101
|
+
const info = stats.toJson('errors-only');
|
|
102
|
+
console.error(clc.red('Webpack errors:'));
|
|
103
|
+
if (info.errors && info.errors.length) {
|
|
104
|
+
info.errors.forEach((e) => {
|
|
105
|
+
console.error(clc.red(typeof e === 'object' ? JSON.stringify(e, null, 2) : e));
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.error(clc.red(JSON.stringify(info, null, 2)));
|
|
110
|
+
}
|
|
111
|
+
callback && callback(stats);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log(clc.green('Build OK.'));
|
|
115
|
+
callback && callback(null);
|
|
116
|
+
}
|
|
89
117
|
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
console.error(clc.red('Failed to load webpack config'));
|
|
122
|
+
throw e;
|
|
123
|
+
}
|
|
92
124
|
}
|
|
93
125
|
function installExternals(callback) {
|
|
94
|
-
// Get external versions.
|
|
95
126
|
let externals = options.externals.map((x) => {
|
|
96
|
-
return `${x}@${JSON.parse(fs.readFileSync(path.resolve(options.src, '..', 'node_modules', x, 'package.json'))).version}`;
|
|
127
|
+
return `${x}@${JSON.parse(fs.readFileSync(path.resolve(options.src, '..', 'node_modules', x, 'package.json'), 'utf8')).version}`;
|
|
97
128
|
});
|
|
98
|
-
// Install external versions.
|
|
99
129
|
if (externals.length) {
|
|
100
130
|
externals = externals.join(' ');
|
|
101
131
|
console.log(clc.blue(`Installing externals ${externals}...`));
|
|
@@ -127,37 +157,28 @@ function zip() {
|
|
|
127
157
|
});
|
|
128
158
|
clc.move(-2, 0);
|
|
129
159
|
}
|
|
130
|
-
function watch() {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
console.log(`npx electron ${electronPath} --src ${path.resolve(options.src)} --build ${path.resolve(options.build)} --port ${options.port} --mode ${options.mode} --config ${options.config} --externals ${options.externals}`);
|
|
153
|
-
exec(`npx electron ${electronPath} --src ${path.resolve(options.src)} --build ${path.resolve(options.build)} --port ${options.port} --mode ${options.mode} --config ${options.config} --externals ${options.externals}`, {
|
|
154
|
-
cwd: __dirname,
|
|
155
|
-
env: environment
|
|
156
|
-
}, (err) => {
|
|
157
|
-
if (err)
|
|
158
|
-
throw err;
|
|
159
|
-
process.exit();
|
|
160
|
-
});
|
|
160
|
+
async function watch() {
|
|
161
|
+
console.log('[VMP] ▸ starting dev-server & electron in watch mode…');
|
|
162
|
+
const cfgPath = path.resolve(__dirname, '..', 'webpack.config.js');
|
|
163
|
+
const webpackConfigFactory = (await import(cfgPath)).default;
|
|
164
|
+
console.log("🚀 ~ watch ~ webpackConfigFactory:", webpackConfigFactory);
|
|
165
|
+
const compiler = webpack(webpackConfigFactory(options));
|
|
166
|
+
const server = new WebpackDevServer({ static: path.join(__dirname, options.src, '..'), port: options.port }, compiler);
|
|
167
|
+
await server.start();
|
|
168
|
+
console.log(`[VMP] ▸ dev-server listening on http://localhost:${options.port}`);
|
|
169
|
+
const cmd = [
|
|
170
|
+
'npx', 'electron', electronPath,
|
|
171
|
+
'--src', path.resolve(options.src),
|
|
172
|
+
'--build', path.resolve(options.build),
|
|
173
|
+
'--port', String(options.port),
|
|
174
|
+
'--mode', 'watch',
|
|
175
|
+
'--config', options.config,
|
|
176
|
+
'--externals', options.externals.join(',')
|
|
177
|
+
].join(' ');
|
|
178
|
+
console.log(`[VMP] ▸ ${cmd}`);
|
|
179
|
+
const child = exec(cmd, { cwd: __dirname, env: { ...process.env, NODE_ENV: 'development' } });
|
|
180
|
+
child.stdout?.pipe(process.stdout);
|
|
181
|
+
child.stderr?.pipe(process.stderr);
|
|
161
182
|
}
|
|
162
183
|
function run() {
|
|
163
184
|
pack((err) => {
|
|
@@ -165,15 +186,19 @@ function run() {
|
|
|
165
186
|
throw err;
|
|
166
187
|
}
|
|
167
188
|
else {
|
|
168
|
-
|
|
169
|
-
cwd: __dirname
|
|
170
|
-
});
|
|
189
|
+
runElectron();
|
|
171
190
|
}
|
|
172
191
|
});
|
|
173
192
|
}
|
|
174
193
|
function loadConfiguration() {
|
|
175
|
-
|
|
176
|
-
|
|
194
|
+
tsNode.register({
|
|
195
|
+
compilerOptions: {
|
|
196
|
+
moduleResolution: 'node',
|
|
197
|
+
module: 'commonjs',
|
|
198
|
+
target: 'es2015',
|
|
199
|
+
checkJs: false
|
|
200
|
+
}
|
|
201
|
+
});
|
|
177
202
|
return require(path.resolve(options.confDefinition, 'index.ts')).configuration;
|
|
178
203
|
}
|
|
179
204
|
function generateConfiguration() {
|
|
@@ -190,11 +215,12 @@ function generateConfiguration() {
|
|
|
190
215
|
}
|
|
191
216
|
function validateConfiguration() {
|
|
192
217
|
try {
|
|
193
|
-
const
|
|
194
|
-
const json =
|
|
218
|
+
const jsonPath = path.resolve(options.src, '../', 'configuration.json');
|
|
219
|
+
const json = JSON.parse(fs.readFileSync(jsonPath, 'utf8')); // Leer y parsear el archivo JSON
|
|
195
220
|
const conf = Configuration.fromJSON(json);
|
|
196
221
|
if (conf.durationFormula) {
|
|
197
|
-
const
|
|
222
|
+
const valuesPath = path.resolve(options.src, 'test', 'parameters.json');
|
|
223
|
+
const values = JSON.parse(fs.readFileSync(valuesPath, 'utf8')); // Leer y parsear otro archivo JSON
|
|
198
224
|
console.log('Validate duration');
|
|
199
225
|
console.log('Duration on undefined:', conf.getDuration({}), 'seconds');
|
|
200
226
|
console.log('Duration:', conf.getDuration(values.parameters), 'seconds');
|
package/dist/webpack.config.js
CHANGED
|
@@ -1,112 +1,144 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
]
|
|
31
|
-
},
|
|
32
|
-
module: {
|
|
33
|
-
rules: [
|
|
34
|
-
{
|
|
35
|
-
test: /\.(ts|tsx|js|jsx)$/,
|
|
36
|
-
exclude: /node_modules/,
|
|
37
|
-
use: {
|
|
38
|
-
loader: 'babel-loader',
|
|
39
|
-
options: {
|
|
40
|
-
presets: [
|
|
41
|
-
'@babel/preset-env',
|
|
42
|
-
'@babel/preset-react',
|
|
43
|
-
'@babel/preset-typescript'
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
}
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|
4
|
+
import { CleanWebpackPlugin } from 'clean-webpack-plugin';
|
|
5
|
+
import CopyWebpackPlugin from 'copy-webpack-plugin';
|
|
6
|
+
import TerserPlugin from 'terser-webpack-plugin';
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
export default (env = {}, argv = {}) => {
|
|
10
|
+
const options = {
|
|
11
|
+
src: env.src ?? './src',
|
|
12
|
+
build: env.build ?? './build',
|
|
13
|
+
port: env.port ?? 8080,
|
|
14
|
+
mode: argv.mode ?? 'production',
|
|
15
|
+
};
|
|
16
|
+
const isDev = options.mode === 'watch';
|
|
17
|
+
const buildPath = path.resolve(options.build);
|
|
18
|
+
const controllerHtmlPath = path.resolve(options.src, 'index.html');
|
|
19
|
+
console.log("🚀 ~ controllerHtmlPath:", controllerHtmlPath);
|
|
20
|
+
const controllerStaticPath = path.resolve(path.dirname(controllerHtmlPath), '../static');
|
|
21
|
+
const controllerFontsPath = path.resolve(path.dirname(controllerHtmlPath), '../fonts');
|
|
22
|
+
return {
|
|
23
|
+
mode: isDev ? 'development' : 'production',
|
|
24
|
+
target: 'electron-renderer',
|
|
25
|
+
entry: path.resolve(options.src, 'main.ts'),
|
|
26
|
+
output: {
|
|
27
|
+
path: buildPath,
|
|
28
|
+
filename: '[name].bundle.js',
|
|
29
|
+
publicPath: '/'
|
|
47
30
|
},
|
|
48
|
-
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
31
|
+
externals: {
|
|
32
|
+
'@vixoniccom/module-controller': 'commonjs @vixoniccom/module-controller',
|
|
33
|
+
webpack: 'commonjs webpack',
|
|
34
|
+
'terser-webpack-plugin': 'commonjs terser-webpack-plugin',
|
|
35
|
+
esbuild: 'commonjs esbuild',
|
|
36
|
+
'@swc/core': 'commonjs @swc/core',
|
|
37
|
+
'@swc/wasm': 'commonjs @swc/wasm'
|
|
52
38
|
},
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
39
|
+
resolve: {
|
|
40
|
+
extensions: ['.tsx', '.ts', '.js', '.jsx', '.mjs'],
|
|
41
|
+
mainFields: ['module', 'browser', 'main'],
|
|
42
|
+
fullySpecified: false,
|
|
43
|
+
modules: [
|
|
44
|
+
'node_modules',
|
|
45
|
+
path.resolve(__dirname, '../../node_modules')
|
|
46
|
+
]
|
|
59
47
|
},
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
48
|
+
module: {
|
|
49
|
+
rules: [
|
|
50
|
+
{
|
|
51
|
+
test: /\.(ts|tsx|js|jsx)$/,
|
|
52
|
+
exclude: /node_modules/,
|
|
53
|
+
use: {
|
|
54
|
+
loader: 'ts-loader',
|
|
55
|
+
options: {
|
|
56
|
+
transpileOnly: true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
test: /\.s[ac]ss$/,
|
|
62
|
+
use: ['style-loader', 'css-loader', 'sass-loader']
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
test: /\.jsx?$/,
|
|
66
|
+
exclude: /node_modules/,
|
|
67
|
+
use: {
|
|
68
|
+
loader: 'ts-loader',
|
|
69
|
+
options: {
|
|
70
|
+
allowTsInNodeModules: true
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
test: /\.css$/,
|
|
76
|
+
use: ['style-loader', 'css-loader'],
|
|
77
|
+
exclude: /node_modules/
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
test: /\.(png|jpe?g|gif|svg|woff2?|ttf|eot)$/,
|
|
81
|
+
type: 'asset/resource',
|
|
82
|
+
generator: {
|
|
83
|
+
filename: 'assets/[hash][ext][query]'
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
test: /\.html$/,
|
|
88
|
+
use: {
|
|
89
|
+
loader: 'html-loader',
|
|
90
|
+
options: {
|
|
91
|
+
sources: false,
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
plugins: [
|
|
98
|
+
new CleanWebpackPlugin(),
|
|
99
|
+
new HtmlWebpackPlugin({
|
|
100
|
+
template: controllerHtmlPath,
|
|
101
|
+
filename: 'index.html',
|
|
102
|
+
inject: 'body',
|
|
103
|
+
chunks: ['main']
|
|
104
|
+
}),
|
|
105
|
+
new CopyWebpackPlugin({
|
|
106
|
+
patterns: [
|
|
107
|
+
{ from: controllerStaticPath, to: 'static', noErrorOnMissing: true },
|
|
108
|
+
{ from: controllerFontsPath, to: 'fonts', noErrorOnMissing: true }
|
|
109
|
+
]
|
|
110
|
+
})
|
|
111
|
+
],
|
|
112
|
+
optimization: isDev ? undefined : {
|
|
113
|
+
minimize: false,
|
|
114
|
+
minimizer: [
|
|
115
|
+
new TerserPlugin({
|
|
116
|
+
minify: TerserPlugin.terserMinify,
|
|
117
|
+
terserOptions: {
|
|
118
|
+
ecma: 2020,
|
|
119
|
+
compress: true,
|
|
120
|
+
mangle: true,
|
|
121
|
+
format: { comments: false }
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
devtool: isDev ? 'source-map' : false,
|
|
127
|
+
devServer: isDev ? {
|
|
128
|
+
static: {
|
|
129
|
+
directory: path.resolve(options.src)
|
|
130
|
+
},
|
|
131
|
+
open: false,
|
|
132
|
+
client: {
|
|
133
|
+
overlay: true
|
|
92
134
|
},
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
},
|
|
104
|
-
port: options.port || 8080,
|
|
105
|
-
hot: true,
|
|
106
|
-
historyApiFallback: true,
|
|
107
|
-
devMiddleware: {
|
|
108
|
-
publicPath: '/'
|
|
109
|
-
}
|
|
110
|
-
} : undefined
|
|
111
|
-
}
|
|
112
|
-
}
|
|
135
|
+
port: options.port || 8080,
|
|
136
|
+
hot: true,
|
|
137
|
+
historyApiFallback: true,
|
|
138
|
+
devMiddleware: {
|
|
139
|
+
publicPath: '/',
|
|
140
|
+
writeToDisk: false
|
|
141
|
+
}
|
|
142
|
+
} : undefined
|
|
143
|
+
};
|
|
144
|
+
};
|