Move fomantic and jQuery to main webpack bundle (#11997)
This saves around 3 MB binary size by not including useless fomantic files in the build. Also, this allows us to move jQuery into the main bundle as well which eliminates a few HTTP requests. Also included are webpack config changes: - split less and css loaders to speed up compliation - enable css sourcemaps - switch css minfier plugin to cssnano-webpack-plugin which works better for sourcemaps than the previous plugin Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		
							parent
							
								
									2281b048af
								
							
						
					
					
						commit
						7761245d08
					
				
					 9 changed files with 88 additions and 69 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							|  | @ -79,8 +79,8 @@ coverage.all | ||||||
| /public/serviceworker.js | /public/serviceworker.js | ||||||
| /public/css | /public/css | ||||||
| /public/fonts | /public/fonts | ||||||
| /public/fomantic |  | ||||||
| /public/img/svg | /public/img/svg | ||||||
|  | /web_src/fomantic/build | ||||||
| /VERSION | /VERSION | ||||||
| 
 | 
 | ||||||
| # Snapcraft | # Snapcraft | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Makefile
									
									
									
									
									
								
							|  | @ -88,7 +88,7 @@ LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(G | ||||||
| 
 | 
 | ||||||
| GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations/migration-test,$(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list -mod=vendor ./... | grep -v /vendor/))) | GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations/migration-test,$(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list -mod=vendor ./... | grep -v /vendor/))) | ||||||
| 
 | 
 | ||||||
| WEBPACK_SOURCES := $(shell find web_src/js web_src/less -type f) | WEBPACK_SOURCES := $(shell find web_src -type f) | ||||||
| WEBPACK_CONFIGS := webpack.config.js | WEBPACK_CONFIGS := webpack.config.js | ||||||
| WEBPACK_DEST := public/js/index.js public/css/index.css | WEBPACK_DEST := public/js/index.js public/css/index.css | ||||||
| WEBPACK_DEST_ENTRIES := public/js public/css public/fonts public/serviceworker.js public/img/svg | WEBPACK_DEST_ENTRIES := public/js public/css public/fonts public/serviceworker.js public/img/svg | ||||||
|  | @ -111,8 +111,8 @@ endif | ||||||
| GO_SOURCES_OWN := $(filter-out vendor/% %/bindata.go, $(GO_SOURCES)) | GO_SOURCES_OWN := $(filter-out vendor/% %/bindata.go, $(GO_SOURCES)) | ||||||
| 
 | 
 | ||||||
| FOMANTIC_CONFIGS := semantic.json web_src/fomantic/theme.config.less web_src/fomantic/_site/globals/site.variables | FOMANTIC_CONFIGS := semantic.json web_src/fomantic/theme.config.less web_src/fomantic/_site/globals/site.variables | ||||||
| FOMANTIC_DEST := public/fomantic/semantic.min.js public/fomantic/semantic.min.css | FOMANTIC_DEST := web_src/fomantic/build/semantic.js web_src/fomantic/build/semantic.css | ||||||
| FOMANTIC_DEST_DIR := public/fomantic | FOMANTIC_DEST_DIR := web_src/fomantic/build | ||||||
| 
 | 
 | ||||||
| #To update swagger use: GO111MODULE=on go get -u github.com/go-swagger/go-swagger/cmd/swagger@v0.20.1
 | #To update swagger use: GO111MODULE=on go get -u github.com/go-swagger/go-swagger/cmd/swagger@v0.20.1
 | ||||||
| SWAGGER := $(GO) run -mod=vendor github.com/go-swagger/go-swagger/cmd/swagger | SWAGGER := $(GO) run -mod=vendor github.com/go-swagger/go-swagger/cmd/swagger | ||||||
|  | @ -297,7 +297,7 @@ lint-frontend: node_modules | ||||||
| 	npx stylelint web_src/less | 	npx stylelint web_src/less | ||||||
| 
 | 
 | ||||||
| .PHONY: watch-frontend | .PHONY: watch-frontend | ||||||
| watch-frontend: node_modules | watch-frontend: node-check $(FOMANTIC_DEST) node_modules | ||||||
| 	rm -rf $(WEBPACK_DEST_ENTRIES) | 	rm -rf $(WEBPACK_DEST_ENTRIES) | ||||||
| 	NODE_ENV=development npx webpack --hide-modules --display-entrypoints=false --watch --progress | 	NODE_ENV=development npx webpack --hide-modules --display-entrypoints=false --watch --progress | ||||||
| 
 | 
 | ||||||
|  | @ -590,7 +590,7 @@ npm-update: node-check | node_modules | ||||||
| .PHONY: fomantic | .PHONY: fomantic | ||||||
| fomantic: $(FOMANTIC_DEST) | fomantic: $(FOMANTIC_DEST) | ||||||
| 
 | 
 | ||||||
| $(FOMANTIC_DEST): $(FOMANTIC_CONFIGS) package-lock.json | node_modules | $(FOMANTIC_DEST): $(FOMANTIC_CONFIGS) | node_modules | ||||||
| 	rm -rf $(FOMANTIC_DEST_DIR) | 	rm -rf $(FOMANTIC_DEST_DIR) | ||||||
| 	cp web_src/fomantic/theme.config.less node_modules/fomantic-ui/src/theme.config | 	cp web_src/fomantic/theme.config.less node_modules/fomantic-ui/src/theme.config | ||||||
| 	cp -r web_src/fomantic/_site/* node_modules/fomantic-ui/src/_site/ | 	cp -r web_src/fomantic/_site/* node_modules/fomantic-ui/src/_site/ | ||||||
|  |  | ||||||
|  | @ -33,7 +33,6 @@ type Options struct { | ||||||
| // KnownPublicEntries list all direct children in the `public` directory
 | // KnownPublicEntries list all direct children in the `public` directory
 | ||||||
| var KnownPublicEntries = []string{ | var KnownPublicEntries = []string{ | ||||||
| 	"css", | 	"css", | ||||||
| 	"fomantic", |  | ||||||
| 	"img", | 	"img", | ||||||
| 	"js", | 	"js", | ||||||
| 	"serviceworker.js", | 	"serviceworker.js", | ||||||
|  |  | ||||||
							
								
								
									
										28
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										28
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							|  | @ -3458,6 +3458,15 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", |       "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", | ||||||
|       "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" |       "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" | ||||||
|     }, |     }, | ||||||
|  |     "cssnano-webpack-plugin": { | ||||||
|  |       "version": "1.0.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/cssnano-webpack-plugin/-/cssnano-webpack-plugin-1.0.3.tgz", | ||||||
|  |       "integrity": "sha512-OkxkOR6WlTBdIbPObCTWuUuZCr3bDPYClm5gquo2LEkOCvM1mbI9MAUstqS2+u6pImnd2f6dNgmmcvVbmYJ7fg==", | ||||||
|  |       "requires": { | ||||||
|  |         "cssnano": "^4.1.10", | ||||||
|  |         "webpack-sources": "^1.4.3" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "csso": { |     "csso": { | ||||||
|       "version": "4.0.3", |       "version": "4.0.3", | ||||||
|       "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", |       "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", | ||||||
|  | @ -7897,15 +7906,6 @@ | ||||||
|       "integrity": "sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA==", |       "integrity": "sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "last-call-webpack-plugin": { |  | ||||||
|       "version": "3.0.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", |  | ||||||
|       "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", |  | ||||||
|       "requires": { |  | ||||||
|         "lodash": "^4.17.5", |  | ||||||
|         "webpack-sources": "^1.1.0" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "last-run": { |     "last-run": { | ||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", |       "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", | ||||||
|  | @ -9617,15 +9617,6 @@ | ||||||
|         "mimic-fn": "^1.0.0" |         "mimic-fn": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "optimize-css-assets-webpack-plugin": { |  | ||||||
|       "version": "5.0.3", |  | ||||||
|       "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", |  | ||||||
|       "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", |  | ||||||
|       "requires": { |  | ||||||
|         "cssnano": "^4.1.10", |  | ||||||
|         "last-call-webpack-plugin": "^3.0.0" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "optionator": { |     "optionator": { | ||||||
|       "version": "0.9.1", |       "version": "0.9.1", | ||||||
|       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", |       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", | ||||||
|  | @ -10932,6 +10923,7 @@ | ||||||
|       "version": "4.0.2", |       "version": "4.0.2", | ||||||
|       "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", |       "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", | ||||||
|       "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", |       "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", | ||||||
|  |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "postcss": "^7.0.26" |         "postcss": "^7.0.26" | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ | ||||||
|     "clipboard": "2.0.6", |     "clipboard": "2.0.6", | ||||||
|     "core-js": "3.6.5", |     "core-js": "3.6.5", | ||||||
|     "css-loader": "3.5.3", |     "css-loader": "3.5.3", | ||||||
|     "cssnano": "4.1.10", |     "cssnano-webpack-plugin": "1.0.3", | ||||||
|     "domino": "2.1.5", |     "domino": "2.1.5", | ||||||
|     "dropzone": "5.7.1", |     "dropzone": "5.7.1", | ||||||
|     "fast-glob": "3.2.2", |     "fast-glob": "3.2.2", | ||||||
|  | @ -29,10 +29,8 @@ | ||||||
|     "mini-css-extract-plugin": "0.9.0", |     "mini-css-extract-plugin": "0.9.0", | ||||||
|     "monaco-editor": "0.20.0", |     "monaco-editor": "0.20.0", | ||||||
|     "monaco-editor-webpack-plugin": "1.9.0", |     "monaco-editor-webpack-plugin": "1.9.0", | ||||||
|     "optimize-css-assets-webpack-plugin": "5.0.3", |  | ||||||
|     "postcss-loader": "3.0.0", |     "postcss-loader": "3.0.0", | ||||||
|     "postcss-preset-env": "6.7.0", |     "postcss-preset-env": "6.7.0", | ||||||
|     "postcss-safe-parser": "4.0.2", |  | ||||||
|     "svg-sprite-loader": "5.0.0", |     "svg-sprite-loader": "5.0.0", | ||||||
|     "svgo": "1.3.2", |     "svgo": "1.3.2", | ||||||
|     "svgo-loader": "2.2.1", |     "svgo-loader": "2.2.1", | ||||||
|  |  | ||||||
|  | @ -9,12 +9,12 @@ | ||||||
|       "themes": "src/themes/" |       "themes": "src/themes/" | ||||||
|     }, |     }, | ||||||
|     "output": { |     "output": { | ||||||
|       "packaged": "../../public/fomantic/", |       "packaged": "../../web_src/fomantic/build/", | ||||||
|       "uncompressed": "../../public/fomantic/components/", |       "uncompressed": "../../web_src/fomantic/build/components/", | ||||||
|       "compressed": "../../public/fomantic/components/", |       "compressed": "../../web_src/fomantic/build/components/", | ||||||
|       "themes": "../../public/fomantic/themes/" |       "themes": "../../web_src/fomantic/build/themes/" | ||||||
|     }, |     }, | ||||||
|     "clean": "../../public/fomantic/" |     "clean": "../../web_src/fomantic/build/" | ||||||
|   }, |   }, | ||||||
|   "permission": false, |   "permission": false, | ||||||
|   "autoInstall": false, |   "autoInstall": false, | ||||||
|  |  | ||||||
|  | @ -11,8 +11,6 @@ | ||||||
| 	{{template "custom/body_outer_post" .}} | 	{{template "custom/body_outer_post" .}} | ||||||
| 
 | 
 | ||||||
| 	{{template "base/footer_content" .}} | 	{{template "base/footer_content" .}} | ||||||
| 
 |  | ||||||
| 	<script src="{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}"></script> |  | ||||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||||
| 	<script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js"></script> | 	<script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js"></script> | ||||||
| 	<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script> | 	<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script> | ||||||
|  | @ -23,9 +21,6 @@ | ||||||
| {{end}} | {{end}} | ||||||
| 
 | 
 | ||||||
| <!-- Third-party libraries --> | <!-- Third-party libraries --> | ||||||
| {{if .RequireMinicolors}} |  | ||||||
| 	<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script> |  | ||||||
| {{end}} |  | ||||||
| {{if .RequireU2F}} | {{if .RequireU2F}} | ||||||
| 	<script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | 	<script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | ||||||
| {{end}} | {{end}} | ||||||
|  | @ -34,8 +29,10 @@ | ||||||
| 		<script src='{{ URLJoin .RecaptchaURL "api.js"}}' async></script> | 		<script src='{{ URLJoin .RecaptchaURL "api.js"}}' async></script> | ||||||
| 	{{end}} | 	{{end}} | ||||||
| {{end}} | {{end}} | ||||||
| 	<script src="{{StaticUrlPrefix}}/fomantic/semantic.min.js?v={{MD5 AppVer}}"></script> |  | ||||||
| 	<script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script> | 	<script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script> | ||||||
|  | {{if .RequireMinicolors}} | ||||||
|  | 	<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script> | ||||||
|  | {{end}} | ||||||
| {{template "custom/footer" .}} | {{template "custom/footer" .}} | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|  |  | ||||||
|  | @ -95,7 +95,6 @@ | ||||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||||
| 	<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | 	<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | ||||||
| {{end}} | {{end}} | ||||||
| 	<link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> |  | ||||||
| 	<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | 	<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | ||||||
| 	<noscript> | 	<noscript> | ||||||
| 		<style> | 		<style> | ||||||
|  |  | ||||||
|  | @ -1,12 +1,10 @@ | ||||||
| const cssnano = require('cssnano'); |  | ||||||
| const fastGlob = require('fast-glob'); | const fastGlob = require('fast-glob'); | ||||||
| const wrapAnsi = require('wrap-ansi'); | const wrapAnsi = require('wrap-ansi'); | ||||||
|  | const CssNanoPlugin = require('cssnano-webpack-plugin'); | ||||||
| const FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries'); | const FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries'); | ||||||
| const MiniCssExtractPlugin = require('mini-css-extract-plugin'); | const MiniCssExtractPlugin = require('mini-css-extract-plugin'); | ||||||
| const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); | const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); | ||||||
| const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); |  | ||||||
| const PostCSSPresetEnv = require('postcss-preset-env'); | const PostCSSPresetEnv = require('postcss-preset-env'); | ||||||
| const PostCSSSafeParser = require('postcss-safe-parser'); |  | ||||||
| const SpriteLoaderPlugin = require('svg-sprite-loader/plugin'); | const SpriteLoaderPlugin = require('svg-sprite-loader/plugin'); | ||||||
| const TerserPlugin = require('terser-webpack-plugin'); | const TerserPlugin = require('terser-webpack-plugin'); | ||||||
| const VueLoaderPlugin = require('vue-loader/lib/plugin'); | const VueLoaderPlugin = require('vue-loader/lib/plugin'); | ||||||
|  | @ -24,19 +22,31 @@ for (const path of glob('web_src/less/themes/*.less')) { | ||||||
| 
 | 
 | ||||||
| const isProduction = process.env.NODE_ENV !== 'development'; | const isProduction = process.env.NODE_ENV !== 'development'; | ||||||
| 
 | 
 | ||||||
|  | const filterCssImport = (parsedImport, cssFile) => { | ||||||
|  |   const url = parsedImport && parsedImport.url ? parsedImport.url : parsedImport; | ||||||
|  |   const importedFile = url.replace(/[?#].+/, '').toLowerCase(); | ||||||
|  |   if (cssFile.includes('monaco')) return true; | ||||||
|  |   if (cssFile.includes('fomantic')) { | ||||||
|  |     if (/brand-icons/.test(importedFile)) return false; | ||||||
|  |     if (/(eot|ttf|woff)$/.test(importedFile)) return false; | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  |   return cssFile.includes('node_modules'); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| module.exports = { | module.exports = { | ||||||
|   mode: isProduction ? 'production' : 'development', |   mode: isProduction ? 'production' : 'development', | ||||||
|   entry: { |   entry: { | ||||||
|     index: [ |     index: [ | ||||||
|  |       resolve(__dirname, 'web_src/js/jquery.js'), | ||||||
|  |       resolve(__dirname, 'web_src/fomantic/build/semantic.js'), | ||||||
|       resolve(__dirname, 'web_src/js/index.js'), |       resolve(__dirname, 'web_src/js/index.js'), | ||||||
|  |       resolve(__dirname, 'web_src/fomantic/build/semantic.css'), | ||||||
|       resolve(__dirname, 'web_src/less/index.less'), |       resolve(__dirname, 'web_src/less/index.less'), | ||||||
|     ], |     ], | ||||||
|     swagger: [ |     swagger: [ | ||||||
|       resolve(__dirname, 'web_src/js/standalone/swagger.js'), |       resolve(__dirname, 'web_src/js/standalone/swagger.js'), | ||||||
|     ], |     ], | ||||||
|     jquery: [ |  | ||||||
|       resolve(__dirname, 'web_src/js/jquery.js'), |  | ||||||
|     ], |  | ||||||
|     serviceworker: [ |     serviceworker: [ | ||||||
|       resolve(__dirname, 'web_src/js/serviceworker.js'), |       resolve(__dirname, 'web_src/js/serviceworker.js'), | ||||||
|     ], |     ], | ||||||
|  | @ -66,12 +76,9 @@ module.exports = { | ||||||
|           }, |           }, | ||||||
|         }, |         }, | ||||||
|       }), |       }), | ||||||
|       new OptimizeCSSAssetsPlugin({ |       new CssNanoPlugin({ | ||||||
|         cssProcessor: cssnano, |         sourceMap: true, | ||||||
|         cssProcessorOptions: { |         cssnanoOptions: { | ||||||
|           parser: PostCSSSafeParser, |  | ||||||
|         }, |  | ||||||
|         cssProcessorPluginOptions: { |  | ||||||
|           preset: [ |           preset: [ | ||||||
|             'default', |             'default', | ||||||
|             { |             { | ||||||
|  | @ -91,10 +98,10 @@ module.exports = { | ||||||
|         monaco: { |         monaco: { | ||||||
|           test: /monaco-editor/, |           test: /monaco-editor/, | ||||||
|           name: 'monaco', |           name: 'monaco', | ||||||
|           chunks: 'async' |           chunks: 'async', | ||||||
|         } |         }, | ||||||
|       } |       }, | ||||||
|     } |     }, | ||||||
|   }, |   }, | ||||||
|   module: { |   module: { | ||||||
|     rules: [ |     rules: [ | ||||||
|  | @ -150,12 +157,41 @@ module.exports = { | ||||||
|                 ], |                 ], | ||||||
|                 '@babel/plugin-proposal-object-rest-spread', |                 '@babel/plugin-proposal-object-rest-spread', | ||||||
|               ], |               ], | ||||||
|  |               generatorOpts: { | ||||||
|  |                 compact: false, | ||||||
|  |               }, | ||||||
|             }, |             }, | ||||||
|           }, |           }, | ||||||
|         ], |         ], | ||||||
|       }, |       }, | ||||||
|       { |       { | ||||||
|         test: /\.(less|css)$/i, |         test: /.css$/i, | ||||||
|  |         use: [ | ||||||
|  |           { | ||||||
|  |             loader: MiniCssExtractPlugin.loader, | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             loader: 'css-loader', | ||||||
|  |             options: { | ||||||
|  |               importLoaders: 1, | ||||||
|  |               url: filterCssImport, | ||||||
|  |               import: filterCssImport, | ||||||
|  |               sourceMap: true, | ||||||
|  |             }, | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             loader: 'postcss-loader', | ||||||
|  |             options: { | ||||||
|  |               plugins: () => [ | ||||||
|  |                 PostCSSPresetEnv(), | ||||||
|  |               ], | ||||||
|  |               sourceMap: true, | ||||||
|  |             }, | ||||||
|  |           }, | ||||||
|  |         ], | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         test: /.less$/i, | ||||||
|         use: [ |         use: [ | ||||||
|           { |           { | ||||||
|             loader: MiniCssExtractPlugin.loader, |             loader: MiniCssExtractPlugin.loader, | ||||||
|  | @ -164,11 +200,10 @@ module.exports = { | ||||||
|             loader: 'css-loader', |             loader: 'css-loader', | ||||||
|             options: { |             options: { | ||||||
|               importLoaders: 2, |               importLoaders: 2, | ||||||
|               url: (_url, resourcePath) => { |               url: filterCssImport, | ||||||
|                 // only resolve URLs for dependencies
 |               import: filterCssImport, | ||||||
|                 return resourcePath.includes('node_modules'); |               sourceMap: true, | ||||||
|             }, |             }, | ||||||
|             } |  | ||||||
|           }, |           }, | ||||||
|           { |           { | ||||||
|             loader: 'postcss-loader', |             loader: 'postcss-loader', | ||||||
|  | @ -176,10 +211,14 @@ module.exports = { | ||||||
|               plugins: () => [ |               plugins: () => [ | ||||||
|                 PostCSSPresetEnv(), |                 PostCSSPresetEnv(), | ||||||
|               ], |               ], | ||||||
|  |               sourceMap: true, | ||||||
|             }, |             }, | ||||||
|           }, |           }, | ||||||
|           { |           { | ||||||
|             loader: 'less-loader', |             loader: 'less-loader', | ||||||
|  |             options: { | ||||||
|  |               sourceMap: true, | ||||||
|  |             }, | ||||||
|           }, |           }, | ||||||
|         ], |         ], | ||||||
|       }, |       }, | ||||||
|  | @ -232,9 +271,10 @@ module.exports = { | ||||||
|       chunkFilename: 'css/[name].css', |       chunkFilename: 'css/[name].css', | ||||||
|     }), |     }), | ||||||
|     new SourceMapDevToolPlugin({ |     new SourceMapDevToolPlugin({ | ||||||
|       filename: 'js/[name].js.map', |       filename: '[file].map', | ||||||
|       include: [ |       include: [ | ||||||
|         'js/index.js', |         'js/index.js', | ||||||
|  |         'css/index.css', | ||||||
|       ], |       ], | ||||||
|     }), |     }), | ||||||
|     new SpriteLoaderPlugin({ |     new SpriteLoaderPlugin({ | ||||||
|  | @ -251,12 +291,6 @@ module.exports = { | ||||||
|       modulesDirectories: [ |       modulesDirectories: [ | ||||||
|         resolve(__dirname, 'node_modules'), |         resolve(__dirname, 'node_modules'), | ||||||
|       ], |       ], | ||||||
|       additionalModules: [ |  | ||||||
|         { |  | ||||||
|           name: 'fomantic-ui', |  | ||||||
|           directory: resolve(__dirname, 'node_modules/fomantic-ui'), |  | ||||||
|         }, |  | ||||||
|       ], |  | ||||||
|       renderLicenses: (modules) => { |       renderLicenses: (modules) => { | ||||||
|         const line = '-'.repeat(80); |         const line = '-'.repeat(80); | ||||||
|         return modules.map((module) => { |         return modules.map((module) => { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue