Use debian packaged node modules when available - Exclude packaged modules from transpiling - Remove webpack-bundle-analyzer - Resolve .json files - Add more plugins to babel.config.js --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -6,7 +6,6 @@ const StatsWriterPlugin = require('webpack-stats-plugin').StatsWriterPlugin; const CompressionPlugin = require('compression-webpack-plugin'); const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const CopyWebpackPlugin = require('copy-webpack-plugin'); const vendorDllHash = require('./helpers/vendor_dll_hash'); @@ -147,13 +146,13 @@ }, resolve: { - extensions: ['.js', '.gql', '.graphql'], - modules: ['/usr/share/gitlab/node_modules','/usr/share/gitlab/node_modules/mermaid/node_modules', '/usr/lib/nodejs'], + extensions: ['.js', '.gql', '.graphql', '.json'], + modules: ['/usr/share/gitlab/node_modules','/usr/share/gitlab/vendor/node_modules','/usr/share/gitlab/node_modules/mermaid/node_modules', '/usr/share/gitlab/node_modules/markdown-it/node_modules/', '/usr/lib/nodejs', '/usr/share/nodejs'], alias, }, resolveLoader: { - modules: ['/usr/share/gitlab/node_modules', '/usr/lib/nodejs'], + modules: ['/usr/share/gitlab/node_modules', '/usr/lib/nodejs','/usr/share/nodejs'], }, module: { @@ -166,9 +165,13 @@ }, { test: /\.js$/, - exclude: path => + exclude: [ path => /node_modules\/(?!tributejs)|node_modules|vendor[\\/]assets/.test(path) && !/\.vue\.js/.test(path), + /\/usr\/share\/nodejs/, + /\/usr\/lib\/nodejs/, + /\/usr\/share\/javascript/ + ], loader: 'babel-loader', options: { cacheDirectory: path.join(CACHE_PATH, 'babel-loader'), @@ -502,19 +505,6 @@ // enable HMR only in webpack-dev-server DEV_SERVER_LIVERELOAD && new webpack.HotModuleReplacementPlugin(), - // optionally generate webpack bundle analysis - WEBPACK_REPORT && - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - generateStatsFile: true, - openAnalyzer: false, - reportFilename: path.join(ROOT_PATH, 'webpack-report/index.html'), - statsFilename: path.join(ROOT_PATH, 'webpack-report/stats.json'), - statsOptions: { - source: false, - }, - }), - new webpack.DefinePlugin({ // This one is used to define window.gon.ee and other things properly in tests: 'process.env.IS_EE': JSON.stringify(IS_EE), @@ -540,6 +530,7 @@ node: { fs: 'empty', // sqljs requires fs + Buffer: 'mock', setImmediate: false, }, }; --- a/package.json +++ b/package.json @@ -33,12 +33,6 @@ "webpack-prod": "NODE_OPTIONS=\"--max-old-space-size=3584\" NODE_ENV=production webpack --config config/webpack.config.js" }, "dependencies": { - "@babel/core": "^7.8.4", - "@babel/plugin-proposal-class-properties": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-private-methods": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/preset-env": "^7.8.4", "@gitlab/at.js": "1.5.5", "@gitlab/svgs": "1.127.0", "@gitlab/ui": "14.10.0", @@ -53,64 +47,40 @@ "apollo-link": "^1.2.11", "apollo-link-batch-http": "^1.2.11", "apollo-upload-client": "^10.0.0", - "autosize": "^4.0.2", "aws-sdk": "^2.637.0", - "axios": "^0.19.0", - "babel-loader": "^8.0.6", "babel-plugin-lodash": "^3.3.4", "bootstrap": "4.3.1", "brace-expansion": "^1.1.8", "cache-loader": "^4.1.0", - "chart.js": "2.7.2", "classlist-polyfill": "^1.2.0", - "clipboard": "^1.7.1", "codemirror": "^5.48.4", "codesandbox-api": "0.0.23", "compression-webpack-plugin": "^3.0.1", "copy-webpack-plugin": "^5.0.5", - "core-js": "^3.6.4", "cropper": "^2.3.0", - "css-loader": "^2.1.1", - "d3-scale": "^2.2.2", - "d3-selection": "^1.2.0", - "dateformat": "^3.0.3", - "deckar01-task_list": "^2.3.1", "diff": "^3.4.0", "document-register-element": "1.14.3", "dropzone": "^4.2.0", "emoji-regex": "^7.0.3", "emoji-unicode-version": "^0.2.1", - "exports-loader": "^0.7.0", "file-loader": "^5.1.0", "formdata-polyfill": "^3.0.19", "fuzzaldrin-plus": "^0.6.0", "glob": "^7.1.6", "graphql": "^14.0.2", "immer": "^5.2.1", - "imports-loader": "^0.8.0", - "jed": "^1.1.1", "jest-transform-graphql": "^2.1.0", - "jquery": "^3.4.1", - "jquery-ujs": "1.2.2", "jquery.caret": "^0.3.1", "jquery.waitforimages": "^2.2.0", - "js-cookie": "^2.2.1", - "jszip": "^3.1.3", - "jszip-utils": "^0.0.2", "katex": "^0.10.0", - "lodash": "^4.17.15", "marked": "^0.3.12", "mermaid": "^8.4.8", "mitt": "^1.2.0", "monaco-editor": "^0.18.1", "monaco-editor-webpack-plugin": "^1.7.0", - "mousetrap": "^1.4.6", "pdfjs-dist": "^2.0.943", "pikaday": "^1.8.0", - "popper.js": "^1.16.1", - "prismjs": "^1.6.0", "prosemirror-markdown": "^1.3.0", - "prosemirror-model": "^1.6.4", "raphael": "^2.2.7", "raw-loader": "^4.0.0", "sanitize-html": "^1.22.0", @@ -123,30 +93,19 @@ "svg4everybody": "2.1.9", "swagger-ui-dist": "^3.24.3", "three": "^0.84.0", - "three-orbit-controls": "^82.1.0", - "three-stl-loader": "^1.0.4", - "timeago.js": "^4.0.2", "tiptap": "^1.8.0", "tiptap-commands": "^1.4.0", "tiptap-extensions": "^1.8.0", "tributejs": "4.1.3", "unfetch": "^4.1.0", - "url-loader": "^3.0.0", "visibilityjs": "^1.2.4", - "vue": "^2.6.10", "vue-apollo": "^3.0.3", "vue-loader": "^15.9.0", "vue-router": "^3.0.2", - "vue-template-compiler": "^2.6.10", "vue-virtual-scroll-list": "^1.4.4", "vuedraggable": "^2.23.0", "vuex": "^3.1.0", - "webpack": "^4.42.0", - "webpack-bundle-analyzer": "^3.6.0", - "webpack-cli": "^3.3.11", - "webpack-stats-plugin": "^0.3.1", - "worker-loader": "^2.0.0", - "xterm": "^3.5.0" + "webpack-stats-plugin": "^0.3.1" }, "devDependencies": { }, --- a/babel.config.js +++ b/babel.config.js @@ -19,9 +19,12 @@ // include stage 3 proposals const plugins = [ '@babel/plugin-syntax-import-meta', + '@babel/plugin-syntax-dynamic-import', '@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-json-strings', '@babel/plugin-proposal-private-methods', + '@babel/plugin-proposal-optional-chaining', + '@babel/plugin-proposal-nullish-coalescing-operator', 'lodash', ];