Browse Source

bundle built-in modules together

Eugene Pankov 4 years ago
parent
commit
40209dc60d
7 changed files with 167 additions and 56 deletions
  1. 1 12
      app/package.json
  2. 3 1
      app/src/entry.ts
  3. 36 31
      app/src/plugins.ts
  4. 0 10
      app/webpack.config.js
  5. 13 1
      package.json
  6. 17 0
      webpack.plugin.config.js
  7. 97 1
      yarn.lock

+ 1 - 12
app/package.json

@@ -14,15 +14,7 @@
     "watch": "webpack --progress --color --watch"
   },
   "dependencies": {
-    "@angular/animations": "^12.0.0",
-    "@angular/common": "^12.0.0",
-    "@angular/compiler": "^12.0.0",
-    "@angular/core": "^12.0.0",
-    "@angular/forms": "^12.0.0",
-    "@angular/platform-browser": "^12.0.0",
-    "@angular/platform-browser-dynamic": "^12.0.0",
     "@electron/remote": "1.2.0",
-    "@ng-bootstrap/ng-bootstrap": "^10.0.0",
     "any-promise": "^1.3.0",
     "electron-config": "2.0.0",
     "electron-debug": "^3.2.0",
@@ -33,12 +25,9 @@
     "keytar": "^7.7.0",
     "mz": "^2.7.0",
     "native-process-working-directory": "^1.0.2",
-    "ngx-toastr": "^14.0.0",
     "node-pty": "^0.10.1",
     "npm": "6",
-    "rxjs": "^7.2.0",
-    "yargs": "^17.0.1",
-    "zone.js": "^0.11.4"
+    "yargs": "^17.0.1"
   },
   "optionalDependencies": {
     "macos-native-processlist": "^2.0.0",

+ 3 - 1
app/src/entry.ts

@@ -5,13 +5,15 @@ import 'rxjs'
 import './global.scss'
 import './toastr.scss'
 
+// Importing before @angular/*
+import { findPlugins, initModuleLookup, loadPlugins } from './plugins'
+
 import { enableProdMode, NgModuleRef, ApplicationRef } from '@angular/core'
 import { enableDebugTools } from '@angular/platform-browser'
 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
 import { ipcRenderer } from 'electron'
 
 import { getRootModule } from './app.module'
-import { findPlugins, initModuleLookup, loadPlugins } from './plugins'
 import { BootstrapData, BOOTSTRAP_DATA, PluginInfo } from '../../tabby-core/src/api/mainProcess'
 
 // Always land on the start view

+ 36 - 31
app/src/plugins.ts

@@ -18,28 +18,47 @@ function normalizePath (p: string): string {
 
 const builtinPluginsPath = process.env.TABBY_DEV ? path.dirname(remote.app.getAppPath()) : path.join((process as any).resourcesPath, 'builtin-plugins')
 
+const cachedBuiltinModules = {
+    '@angular/animations': require('@angular/animations'),
+    '@angular/common': require('@angular/common'),
+    '@angular/compiler': require('@angular/compiler'),
+    '@angular/core': require('@angular/core'),
+    '@angular/forms': require('@angular/forms'),
+    '@angular/platform-browser': require('@angular/platform-browser'),
+    '@angular/platform-browser/animations': require('@angular/platform-browser/animations'),
+    '@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'),
+    '@ng-bootstrap/ng-bootstrap': require('@ng-bootstrap/ng-bootstrap'),
+    'ngx-toastr': require('ngx-toastr'),
+    rxjs: require('rxjs'),
+    'rxjs/operators': require('rxjs/operators'),
+    'zone.js/dist/zone.js': require('zone.js/dist/zone.js'),
+}
+
 const builtinModules = [
-    '@angular/animations',
-    '@angular/common',
-    '@angular/compiler',
-    '@angular/core',
-    '@angular/forms',
-    '@angular/platform-browser',
-    '@angular/platform-browser-dynamic',
-    '@ng-bootstrap/ng-bootstrap',
-    'ngx-toastr',
-    'rxjs',
-    'rxjs/operators',
+    ...Object.keys(cachedBuiltinModules),
     'tabby-core',
     'tabby-local',
     'tabby-settings',
     'tabby-terminal',
-    'zone.js/dist/zone.js',
 ]
 
-export type ProgressCallback = (current: number, total: number) => void // eslint-disable-line @typescript-eslint/no-type-alias
+const originalRequire = (global as any).require
+;(global as any).require = function (query: string) {
+    if (cachedBuiltinModules[query]) {
+        return cachedBuiltinModules[query]
+    }
+    return originalRequire.apply(this, [query])
+}
+
+const originalModuleRequire = nodeModule.prototype.require
+nodeModule.prototype.require = function (query: string) {
+    if (cachedBuiltinModules[query]) {
+        return cachedBuiltinModules[query]
+    }
+    return originalModuleRequire.call(this, query)
+}
 
-const cachedBuiltinModules = {}
+export type ProgressCallback = (current: number, total: number) => void // eslint-disable-line @typescript-eslint/no-type-alias
 
 export function initModuleLookup (userPluginsPath: string): void {
     global['module'].paths.map((x: string) => nodeModule.globalPaths.push(normalizePath(x)))
@@ -57,24 +76,10 @@ export function initModuleLookup (userPluginsPath: string): void {
     }
 
     builtinModules.forEach(m => {
-        cachedBuiltinModules[m] = nodeRequire(m)
-    })
-
-    const originalRequire = (global as any).require
-    ;(global as any).require = function (query: string) {
-        if (cachedBuiltinModules[query]) {
-            return cachedBuiltinModules[query]
-        }
-        return originalRequire.apply(this, [query])
-    }
-
-    const originalModuleRequire = nodeModule.prototype.require
-    nodeModule.prototype.require = function (query: string) {
-        if (cachedBuiltinModules[query]) {
-            return cachedBuiltinModules[query]
+        if (!cachedBuiltinModules[m]) {
+            cachedBuiltinModules[m] = nodeRequire(m)
         }
-        return originalModuleRequire.call(this, query)
-    }
+    })
 }
 
 export async function findPlugins (): Promise<PluginInfo[]> {

+ 0 - 10
app/webpack.config.js

@@ -60,23 +60,13 @@ module.exports = {
         ],
     },
     externals: {
-        '@angular/core': 'commonjs @angular/core',
-        '@angular/compiler': 'commonjs @angular/compiler',
-        '@angular/platform-browser': 'commonjs @angular/platform-browser',
-        '@angular/platform-browser-dynamic': 'commonjs @angular/platform-browser-dynamic',
-        '@angular/forms': 'commonjs @angular/forms',
-        '@angular/common': 'commonjs @angular/common',
-        '@ng-bootstrap/ng-bootstrap': 'commonjs @ng-bootstrap/ng-bootstrap',
         '@electron/remote': 'commonjs @electron/remote',
         child_process: 'commonjs child_process',
         electron: 'commonjs electron',
         fs: 'commonjs fs',
-        'ngx-toastr': 'commonjs ngx-toastr',
         module: 'commonjs module',
         mz: 'commonjs mz',
         path: 'commonjs path',
-        rxjs: 'commonjs rxjs',
-        'zone.js': 'commonjs zone.js/dist/zone.js',
     },
     plugins: [
         new webpack.optimize.ModuleConcatenationPlugin(),

+ 13 - 1
package.json

@@ -1,6 +1,14 @@
 {
   "devDependencies": {
+    "@angular/animations": "^12.0.0",
+    "@angular/common": "^12.0.0",
+    "@angular/compiler": "^12.0.0",
+    "@angular/core": "^12.0.0",
+    "@angular/forms": "^12.0.0",
+    "@angular/platform-browser": "^12.0.0",
+    "@angular/platform-browser-dynamic": "^12.0.0",
     "@fortawesome/fontawesome-free": "^5.15.3",
+    "@ng-bootstrap/ng-bootstrap": "^10.0.0",
     "@sentry/cli": "^1.64.2",
     "@sentry/electron": "^2.5.0",
     "@tabby-gang/to-string-loader": "^1.1.7-beta.2",
@@ -32,6 +40,7 @@
     "json-loader": "0.5.7",
     "lru-cache": "^6.0.0",
     "macos-release": "^2.5.0",
+    "ngx-toastr": "^14.0.0",
     "node-abi": "^2.30.0",
     "node-sass": "^6.0.1",
     "npmlog": "4.1.2",
@@ -43,10 +52,12 @@
     "pug-loader": "^2.4.0",
     "pug-static-loader": "2.0.0",
     "raw-loader": "4.0.2",
+    "rxjs": "^7.2.0",
     "sass-loader": "^12.1.0",
     "shelljs": "0.8.4",
     "slugify": "^1.5.3",
     "source-code-pro": "^2.38.0",
+    "source-map-loader": "^3.0.0",
     "source-sans-pro": "3.6.0",
     "style-loader": "^3.0.0",
     "svg-inline-loader": "^0.8.2",
@@ -59,7 +70,8 @@
     "webpack": "^5.42.1",
     "webpack-bundle-analyzer": "^4.4.2",
     "webpack-cli": "^4.7.0",
-    "yaml-loader": "0.6.0"
+    "yaml-loader": "0.6.0",
+    "zone.js": "^0.11.4"
   },
   "resolutions": {
     "lzma-native": "^8.0.0",

+ 17 - 0
webpack.plugin.config.js

@@ -48,9 +48,26 @@ module.exports = options => {
             modules: ['.', 'src', 'node_modules', '../app/node_modules', '../node_modules'].map(x => path.join(options.dirname, x)),
             extensions: ['.ts', '.js'],
         },
+        ignoreWarnings: [/Failed to parse source map/],
         module: {
             rules: [
                 ...options.rules ?? [],
+                {
+                    test: /\.js$/,
+                    enforce: 'pre',
+                    use:                         {
+                        loader: 'source-map-loader',
+                        options: {
+                            filterSourceMappingUrl: (url, resourcePath) => {
+                                if (/node_modules/.test(resourcePath)) {
+                                    return false
+                                }
+                                return true
+                            },
+
+                        },
+                    },
+                },
                 {
                     test: /\.ts$/,
                     use: {

+ 97 - 1
yarn.lock

@@ -7,6 +7,55 @@
   resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz"
   integrity sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==
 
+"@angular/animations@^12.0.0":
+  version "12.1.1"
+  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.1.1.tgz#7da62f1c753e9d3e6f4ada9ef8f4dd97795265b5"
+  integrity sha512-79TfDx1AAxrVNM56oY+OwRpku9eCF6w3ko2DWDeQpgCvqM6/a53B5rPhz6yuwgadIqUdQH0T4CeE/v5hXYdOMA==
+  dependencies:
+    tslib "^2.2.0"
+
+"@angular/common@^12.0.0":
+  version "12.1.1"
+  resolved "https://registry.yarnpkg.com/@angular/common/-/common-12.1.1.tgz#34f63b339570699e1ba6968fd0afdee0cbd66fe3"
+  integrity sha512-NnRwGMatzjthvDQ4+8tm09Ak5i27Qga8x4BdzINN1RjLmzQ0zW00Mn2AUGYEDZHt9HXVHff5stsZGqj+Ne4QJw==
+  dependencies:
+    tslib "^2.2.0"
+
+"@angular/compiler@^12.0.0":
+  version "12.1.1"
+  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-12.1.1.tgz#ec8ae93fa905f6f71c748ba250be8f4d58e31605"
+  integrity sha512-QV56c+A18vdY8AB/SoWq0UkHhJxYDWY+VUY75RM2dxcsXoNeO5FTCjBRkA7yMiX6Q6cahH2ivC7tmqVU2mYHuA==
+  dependencies:
+    tslib "^2.2.0"
+
+"@angular/core@^12.0.0":
+  version "12.1.1"
+  resolved "https://registry.yarnpkg.com/@angular/core/-/core-12.1.1.tgz#448cdc0927bae1420934f6463ac64414d00bc3b0"
+  integrity sha512-7Q4na8zCXi4ITBG8kgbS+vnnVK0GDU2WXU80/il096+8YPFKfj6MyDWZH79KA3jrIg9/yhLwSQx8x8wnj8dqBA==
+  dependencies:
+    tslib "^2.2.0"
+
+"@angular/forms@^12.0.0":
+  version "12.1.1"
+  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-12.1.1.tgz#b076cc4cf9a202ab08038d0e6038c2b7f68af79e"
+  integrity sha512-up5P9jdqsPjrX3YgNMSIkTCwRzVNJbAlDiKrnww7pt5RL2fZGq+x/ddvtTSjdne9oknRKitADFkjuPozPH+LOg==
+  dependencies:
+    tslib "^2.2.0"
+
+"@angular/platform-browser-dynamic@^12.0.0":
+  version "12.1.1"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.1.tgz#d86db1da71be64f75c51b076942b0f65b441a404"
+  integrity sha512-x8bIQzRvrdA/LfnIp5/Fo15BqD7g5j+XQe/KyWM+jBnpKr9queet0xvSAWD+KGkdrebI1xIgNtNNTxPCxREbiQ==
+  dependencies:
+    tslib "^2.2.0"
+
+"@angular/platform-browser@^12.0.0":
+  version "12.1.1"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-12.1.1.tgz#ba6243d77dbdbfb68c3f95a8fa2fd321b812e6d1"
+  integrity sha512-R78K0DYxplYUvctq/7MvoBjuMDgMNrL1h8Bov0g7lN5hQWBQwBjl//CiJgx8H7uSiba9DQ0Jwu5Xxvkzkr8ggA==
+  dependencies:
+    tslib "^2.2.0"
+
 "@babel/[email protected]":
   version "7.12.11"
   resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
@@ -144,6 +193,13 @@
   dependencies:
     cross-spawn "^7.0.1"
 
+"@ng-bootstrap/ng-bootstrap@^10.0.0":
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-10.0.0.tgz#6022927bac7029bdd12d7f1e10b5b20074db06dc"
+  integrity sha512-Sz+QaxjuyJYJ+zyUbf0TevgcgVesCPQiiFiggEzxKjzY5R+Hvq3YgryLdXf2r/ryePL+C3FXCcmmKpTM5bfczQ==
+  dependencies:
+    tslib "^2.1.0"
+
 "@nodelib/[email protected]":
   version "2.1.4"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
@@ -740,6 +796,11 @@ JSONStream@~1.3.1:
     jsonparse "^1.2.0"
     through ">=2.2.7 <3"
 
+abab@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+  integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
 abbrev@1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -5008,6 +5069,13 @@ neo-async@^2.6.0, neo-async@^2.6.2:
   resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
   integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
 
+ngx-toastr@^14.0.0:
+  version "14.0.0"
+  resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-14.0.0.tgz#20e4737ef330b892a453768cd98b980558aeb286"
+  integrity sha512-dnDzSY73pF6FvNyxdh6ftfvXvUg6SU7MAT3orPUCzA77t3ZcFslro06zk4NCA2g67RF7dBwM0OJ/y0SN6fdGYw==
+  dependencies:
+    tslib "^2.1.0"
+
 nice-try@^1.0.4:
   version "1.0.5"
   resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz"
@@ -6834,6 +6902,13 @@ run-queue@^1.0.0, run-queue@^1.0.3:
   dependencies:
     aproba "^1.1.1"
 
+rxjs@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.2.0.tgz#5cd12409639e9514a71c9f5f9192b2c4ae94de31"
+  integrity sha512-aX8w9OpKrQmiPKfT1bqETtUr9JygIz6GZ+gql8v7CijClsP0laoFUdKzxFAoWuRdSlOdU2+crss+cMf+cqMTnw==
+  dependencies:
+    tslib "~2.1.0"
+
 safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@@ -7135,6 +7210,15 @@ source-map-js@^0.6.2:
   resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
   integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
 
+source-map-loader@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.0.tgz#f2a04ee2808ad01c774dea6b7d2639839f3b3049"
+  integrity sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==
+  dependencies:
+    abab "^2.0.5"
+    iconv-lite "^0.6.2"
+    source-map-js "^0.6.2"
+
 source-map-support@^0.5.19, source-map-support@~0.5.12, source-map-support@~0.5.19:
   version "0.5.19"
   resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"
@@ -7796,11 +7880,16 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
   resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
-tslib@^2.0.3, tslib@^2.2.0, tslib@^2.3.0:
+tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
   integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
 
+tslib@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
+  integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
+
 tsutils@^3.17.1, tsutils@^3.21.0:
   version "3.21.0"
   resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -8643,3 +8732,10 @@ yocto-queue@^0.1.0:
   version "0.1.0"
   resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
   integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zone.js@^0.11.4:
+  version "0.11.4"
+  resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.11.4.tgz#0f70dcf6aba80f698af5735cbb257969396e8025"
+  integrity sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==
+  dependencies:
+    tslib "^2.0.0"