Use debian packaged node modules when available - Exclude packaged modules from transpiling - Remove webpack-bundle-analyzer - Resolve .json files - Add mkdirp 1.0 and loader-utils 2.0 to ensure compatibility for packaged modules (See #976310) - Use link protocol for modules with permission issues (which has a bin: entry in package.json) or dependencies. Use portal protocol only for modules that 1. does not have any other dependency and 2. does not have a bin: entry See https://github.com/yarnpkg/berry/issues/2266 - Even better, portal protocol tries to satisfy even devDependencies so avoid it - Modules with problems compression-webpack-plugin, copy-webpack-plugin, jszip, mkdirp, js-yaml, font-awesome, katex, cache-loader, webpack - babel-loader, cache-loader needs loader-utils 1.x and we already have 2.x and no compat patch - brace-expansion is a major version ahead in the archive - xterm build is broken (#980406) --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -16,7 +16,6 @@ const VUE_VERSION = require('vue/package.json').version; const webpack = require('webpack'); -const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); const { StatsWriterPlugin } = require('webpack-stats-plugin'); const WEBPACK_VERSION = require('webpack/package.json').version; @@ -237,6 +236,8 @@ entry: generateEntries, + externals: [ 'canvas' ], + output: { path: WEBPACK_OUTPUT_PATH, publicPath: WEBPACK_PUBLIC_PATH, @@ -246,10 +247,15 @@ }, resolve: { - extensions: ['.js'], + extensions: ['.js', '.gql', '.graphql', '.json'], + modules: ['node_modules','/var/lib/gitlab/node_modules','/usr/share/gitlab/vendor/node_modules','/usr/share/gitlab/node_modules/mermaid/node_modules', '/usr/share/nodejs/markdown-it/node_modules/', '/usr/lib/nodejs', '/usr/share/nodejs'], alias, }, + resolveLoader: { + modules: ['node_modules','/var/lib/gitlab/node_modules', '/usr/lib/nodejs','/usr/share/nodejs'], + }, + module: { strictExportPresence: true, rules: [ @@ -348,7 +354,7 @@ }, { test: /\.(eot|ttf|woff|woff2)$/, - include: /node_modules\/(katex\/dist\/fonts|monaco-editor)/, + include: /(node_modules\/monaco-editor|\/usr\/share\/fonts\/truetype\/katex)/, loader: 'file-loader', options: { name: '[name].[contenthash:8].[ext]', @@ -659,19 +665,6 @@ }, }, - // 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({ // These are used to define window.gon.ee, window.gon.jh and other things properly in tests: 'process.env.IS_EE': JSON.stringify(IS_EE), @@ -736,6 +729,7 @@ node: { fs: 'empty', // sqljs requires fs + Buffer: 'mock', setImmediate: false, }, }; --- a/package.json +++ b/package.json @@ -48,18 +48,18 @@ }, "dependencies": { "@apollo/client": "^3.3.11", - "@babel/core": "^7.10.1", - "@babel/plugin-proposal-class-properties": "^7.10.1", - "@babel/plugin-proposal-json-strings": "^7.10.1", - "@babel/plugin-proposal-private-methods": "^7.10.1", - "@babel/plugin-syntax-import-meta": "^7.10.1", - "@babel/preset-env": "^7.10.1", + "@babel/core": "link:/usr/share/nodejs/@babel/core", + "@babel/plugin-proposal-class-properties": "link:/usr/share/nodejs/@babel/plugin-proposal-class-properties", + "@babel/plugin-proposal-json-strings": "link:/usr/share/nodejs/@babel/plugin-proposal-json-strings", + "@babel/plugin-proposal-private-methods": "link:/usr/share/nodejs/@babel/plugin-proposal-private-methods", + "@babel/plugin-syntax-import-meta": "link:/usr/share/nodejs/@babel/plugin-syntax-import-meta", + "@babel/preset-env": "link:/usr/share/nodejs/@babel/preset-env", "@gitlab/at.js": "1.5.7", "@gitlab/favicon-overlay": "2.0.0", "@gitlab/svgs": "2.6.0", "@gitlab/ui": "37.3.0", "@gitlab/visual-review-tools": "1.6.1", - "@rails/actioncable": "6.1.4-6", + "@rails/actioncable": "link:/usr/share/nodejs/@rails/actioncable", "@rails/ujs": "6.1.4-6", "@sentry/browser": "5.30.0", "@sourcegraph/code-host-integration": "0.0.60", @@ -100,23 +100,23 @@ "aws-sdk": "^2.637.0", "axios": "^0.24.0", "babel-loader": "^8.2.2", - "babel-plugin-lodash": "^3.3.4", + "babel-plugin-lodash": "link:/usr/share/nodejs/babel-plugin-lodash", "bootstrap": "4.5.3", "cache-loader": "^4.1.0", "canvas-confetti": "^1.4.0", - "clipboard": "^2.0.8", - "codemirror": "^5.48.4", + "clipboard": "link:/usr/share/nodejs/clipboard", + "codemirror": "link:/usr/share/nodejs/codemirror", "codesandbox-api": "0.0.23", "compression-webpack-plugin": "^5.0.2", "copy-webpack-plugin": "^6.4.1", "core-js": "^3.21.1", - "cron-validator": "^1.1.1", + "cron-validator": "link:/usr/share/nodejs/cron-validator", "cronstrue": "^1.122.0", "cropper": "^2.3.0", "css-loader": "^2.1.1", - "d3": "^5.16.0", - "d3-sankey": "^0.12.3", - "d3-selection": "^1.2.0", + "d3": "link:/usr/share/nodejs/d3", + "d3-sankey": "link:/usr/share/nodejs/d3-sankey", + "d3-selection": "link:/usr/share/nodejs/d3-selection", "dateformat": "^5.0.1", "deckar01-task_list": "^2.3.1", "diff": "^3.4.0", @@ -135,31 +135,31 @@ "jed": "^1.1.1", "jquery": "^3.6.0", "jquery.caret": "^0.3.1", - "js-cookie": "^2.2.1", - "js-yaml": "^3.13.1", + "js-cookie": "link:/usr/share/nodejs/js-cookie", + "js-yaml": "link:/usr/share/nodejs/js-yaml", "jszip": "^3.1.3", - "jszip-utils": "^0.0.2", - "katex": "^0.13.2", - "lodash": "^4.17.20", + "jszip-utils": "link:/usr/share/nodejs/jszip-utils", + "katex": "link:/usr/share/nodejs/katex", + "lodash": "link:/usr/share/nodejs/lodash", "lowlight": "^2.5.0", "marked": "^0.3.12", "mathjax": "3", - "mermaid": "^8.13.10", - "minimatch": "^3.0.4", + "mermaid": "link:/usr/share/nodejs/mermaid", + "minimatch": "link:/usr/share/nodejs/minimatch", "monaco-editor": "^0.25.2", "monaco-editor-webpack-plugin": "^4.0.0", "monaco-yaml": "^2.5.1", "mousetrap": "1.6.5", "papaparse": "^5.3.1", - "pdfjs-dist": "^2.0.943", + "pdfjs-dist": "link:/usr/share/nodejs/pdfjs-dist", "pikaday": "^1.8.0", - "popper.js": "^1.16.1", + "popper.js": "link:/usr/share/nodejs/popper.js", "portal-vue": "^2.1.7", - "postcss": "8.4.5", + "postcss": "link:/usr/share/nodejs/postcss", "prismjs": "^1.21.0", - "prosemirror-markdown": "1.7.1", - "prosemirror-model": "^1.16.1", - "prosemirror-state": "^1.3.4", + "prosemirror-markdown": "link:/usr/share/nodejs/prosemirror-markdown", + "prosemirror-model": "link:/usr/share/nodejs/prosemirror-model", + "prosemirror-state": "link:/usr/share/nodejs/prosemirror-state", "prosemirror-tables": "^1.1.1", "prosemirror-view": "^1.23.7", "raphael": "^2.2.7", @@ -173,25 +173,24 @@ "style-loader": "^2.0.0", "swagger-ui-dist": "4.8.0", "three": "^0.84.0", - "three-orbit-controls": "^82.1.0", + "three-orbit-controls": "link:/usr/share/nodejs/three-orbit-controls", "three-stl-loader": "^1.0.4", - "timeago.js": "^4.0.2", + "timeago.js": "link:/usr/share/nodejs/timeago.js", "url-loader": "^4.1.1", - "uuid": "8.1.0", + "uuid": "link:/usr/share/nodejs/uuid", "visibilityjs": "^1.2.4", - "vue": "^2.6.12", + "vue": "link:/usr/share/nodejs/vue", "vue-apollo": "^3.0.7", "vue-loader": "^15.9.6", "vue-observe-visibility": "^1.0.0", "vue-resize": "^1.0.1", "vue-router": "3.4.9", - "vue-template-compiler": "^2.6.12", + "vue-template-compiler": "link:/usr/share/nodejs/vue-template-compiler", "vue-virtual-scroll-list": "^1.4.7", "vuedraggable": "^2.23.0", "vuex": "^3.6.0", "web-vitals": "^0.2.4", "webpack": "^4.46.0", - "webpack-bundle-analyzer": "^4.4.2", "webpack-cli": "^4.9.2", "webpack-stats-plugin": "^0.3.1", "worker-loader": "^2.0.0", --- a/babel.config.js +++ b/babel.config.js @@ -14,6 +14,7 @@ // 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', --- a/app/assets/javascripts/pdf/index.vue +++ b/app/assets/javascripts/pdf/index.vue @@ -1,6 +1,6 @@