diff options
Diffstat (limited to 'language-web/webpack.config.js')
-rw-r--r-- | language-web/webpack.config.js | 85 |
1 files changed, 57 insertions, 28 deletions
diff --git a/language-web/webpack.config.js b/language-web/webpack.config.js index 8f0fb3f2..ae2f2386 100644 --- a/language-web/webpack.config.js +++ b/language-web/webpack.config.js | |||
@@ -13,7 +13,7 @@ const outputPath = path.resolve(__dirname, 'build/webpack', currentNodeEnv); | |||
13 | const portNumberOrElse = (envName, fallback) => { | 13 | const portNumberOrElse = (envName, fallback) => { |
14 | const value = process.env[envName]; | 14 | const value = process.env[envName]; |
15 | return value ? parseInt(value) : fallback; | 15 | return value ? parseInt(value) : fallback; |
16 | } | 16 | }; |
17 | const listenHost = process.env['LISTEN_HOST'] || 'localhost'; | 17 | const listenHost = process.env['LISTEN_HOST'] || 'localhost'; |
18 | const listenPort = portNumberOrElse('LISTEN_PORT', 1313); | 18 | const listenPort = portNumberOrElse('LISTEN_PORT', 1313); |
19 | const apiHost = process.env['API_HOST'] || listenHost; | 19 | const apiHost = process.env['API_HOST'] || listenHost; |
@@ -21,6 +21,23 @@ const apiPort = portNumberOrElse('API_PORT', 1312); | |||
21 | const publicHost = process.env['PUBLIC_HOST'] || listenHost; | 21 | const publicHost = process.env['PUBLIC_HOST'] || listenHost; |
22 | const publicPort = portNumberOrElse('PUBLIC_PORT', listenPort); | 22 | const publicPort = portNumberOrElse('PUBLIC_PORT', listenPort); |
23 | 23 | ||
24 | const resolveSources = sources => path.resolve(__dirname, 'src', sources); | ||
25 | const resolveGenerated = sources => path.resolve(__dirname, 'build/generated/sources', sources); | ||
26 | const mainJsSources = resolveSources('main/js'); | ||
27 | const babelLoaderFilters = { | ||
28 | include: [mainJsSources], | ||
29 | exclude: [resolveSources('main/js/xtext')], | ||
30 | }; | ||
31 | const babelPresets = [ | ||
32 | [ | ||
33 | '@babel/preset-env', | ||
34 | { | ||
35 | targets: 'defaults', | ||
36 | }, | ||
37 | ], | ||
38 | '@babel/preset-react', | ||
39 | ]; | ||
40 | |||
24 | module.exports = { | 41 | module.exports = { |
25 | mode: devMode ? 'development' : 'production', | 42 | mode: devMode ? 'development' : 'production', |
26 | entry: './src/main/js', | 43 | entry: './src/main/js', |
@@ -35,19 +52,10 @@ module.exports = { | |||
35 | rules: [ | 52 | rules: [ |
36 | { | 53 | { |
37 | test: /\.jsx?$/i, | 54 | test: /\.jsx?$/i, |
38 | include: [path.resolve(__dirname, 'src/main/js')], | 55 | ...babelLoaderFilters, |
39 | exclude: [path.resolve(__dirname, 'src/main/js/xtext')], | ||
40 | loader: 'babel-loader', | 56 | loader: 'babel-loader', |
41 | options: { | 57 | options: { |
42 | presets: [ | 58 | presets: babelPresets, |
43 | [ | ||
44 | '@babel/preset-env', | ||
45 | { | ||
46 | targets: 'defaults', | ||
47 | }, | ||
48 | ], | ||
49 | '@babel/preset-react', | ||
50 | ], | ||
51 | plugins: [ | 59 | plugins: [ |
52 | [ | 60 | [ |
53 | '@babel/plugin-proposal-class-properties', | 61 | '@babel/plugin-proposal-class-properties', |
@@ -62,6 +70,26 @@ module.exports = { | |||
62 | }, | 70 | }, |
63 | }, | 71 | }, |
64 | { | 72 | { |
73 | test: /.tsx?$/i, | ||
74 | ...babelLoaderFilters, | ||
75 | loader: 'babel-loader', | ||
76 | options: { | ||
77 | presets: [ | ||
78 | ...babelPresets, | ||
79 | [ | ||
80 | '@babel/preset-typescript', | ||
81 | { | ||
82 | isTSX: true, | ||
83 | allExtensions: true, | ||
84 | allowDeclareFields: true, | ||
85 | onlyRemoveTypeImports: true, | ||
86 | optimizeConstEnums: true, | ||
87 | }, | ||
88 | ] | ||
89 | ], | ||
90 | }, | ||
91 | }, | ||
92 | { | ||
65 | test: /\.scss$/i, | 93 | test: /\.scss$/i, |
66 | use: [ | 94 | use: [ |
67 | devMode ? 'style-loader' : MiniCssExtractPlugin.loader, | 95 | devMode ? 'style-loader' : MiniCssExtractPlugin.loader, |
@@ -72,7 +100,7 @@ module.exports = { | |||
72 | implementation: require.resolve('sass'), | 100 | implementation: require.resolve('sass'), |
73 | }, | 101 | }, |
74 | }, | 102 | }, |
75 | ] | 103 | ], |
76 | }, | 104 | }, |
77 | { | 105 | { |
78 | test: /\.(gif|png|jpe?g|svg?)$/i, | 106 | test: /\.(gif|png|jpe?g|svg?)$/i, |
@@ -83,29 +111,24 @@ module.exports = { | |||
83 | disable: true, | 111 | disable: true, |
84 | } | 112 | } |
85 | }, | 113 | }, |
86 | { | ||
87 | loader: 'url-loader', | ||
88 | options: { | ||
89 | limit: 256, | ||
90 | }, | ||
91 | }, | ||
92 | ], | 114 | ], |
115 | type: 'asset', | ||
93 | }, | 116 | }, |
94 | { | 117 | { |
95 | test: /\.woff2?$/i, | 118 | test: /\.woff2?$/i, |
96 | loader: 'file-loader', | 119 | type: 'asset/resource', |
97 | }, | 120 | }, |
98 | ], | 121 | ], |
99 | }, | 122 | }, |
100 | resolve: { | 123 | resolve: { |
101 | modules: [ | 124 | modules: [ |
102 | 'node_modules', | 125 | 'node_modules', |
103 | path.resolve(__dirname, 'src/main/js'), | 126 | mainJsSources, |
104 | path.resolve(__dirname, 'build/generated/sources/xtext/js'), | 127 | resolveGenerated('xtext/js'), |
105 | ], | 128 | ], |
106 | extensions: ['.js', '.jsx'], | 129 | extensions: ['.js', '.jsx', '.ts', '.tsx'], |
107 | alias: { | 130 | alias: { |
108 | images: path.resolve(__dirname, 'src/main/images'), | 131 | images: resolveSources('main/images'), |
109 | }, | 132 | }, |
110 | }, | 133 | }, |
111 | devtool: devMode ? 'inline-source-map' : 'source-map', | 134 | devtool: devMode ? 'inline-source-map' : 'source-map', |
@@ -115,16 +138,22 @@ module.exports = { | |||
115 | }, | 138 | }, |
116 | }, | 139 | }, |
117 | devServer: { | 140 | devServer: { |
118 | contentBase: outputPath, | 141 | client: { |
142 | logging: 'info', | ||
143 | overlay: true, | ||
144 | progress: true, | ||
145 | webSocketURL: { | ||
146 | hostname: publicHost, | ||
147 | port: publicPort, | ||
148 | protocol: publicPort === 443 ? 'wss' : 'ws', | ||
149 | }, | ||
150 | }, | ||
119 | compress: true, | 151 | compress: true, |
120 | host: listenHost, | 152 | host: listenHost, |
121 | port: listenPort, | 153 | port: listenPort, |
122 | proxy: { | 154 | proxy: { |
123 | '/xtext-service': `${apiPort === 443 ? 'https' : 'http'}://${apiHost}:${apiPort}`, | 155 | '/xtext-service': `${apiPort === 443 ? 'https' : 'http'}://${apiHost}:${apiPort}`, |
124 | }, | 156 | }, |
125 | public: `${publicHost}:${publicPort}`, | ||
126 | sockHost: publicHost, | ||
127 | sockPort: publicPort, | ||
128 | }, | 157 | }, |
129 | plugins: [ | 158 | plugins: [ |
130 | new MiniCssExtractPlugin({ | 159 | new MiniCssExtractPlugin({ |