mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
fix imports harder: avoid dynamic imports and bundle all themes, localization and ace-editor files with the app
This commit is contained in:
parent
b4101d986c
commit
8e510f5aac
10
.babelrc
10
.babelrc
@ -1,12 +1,14 @@
|
|||||||
{
|
{
|
||||||
"presets": [
|
"presets": [
|
||||||
"@babel/preset-env",
|
[
|
||||||
|
"@babel/preset-env", {"modules": "commonjs"}
|
||||||
|
],
|
||||||
"@babel/preset-react",
|
"@babel/preset-react",
|
||||||
"@lingui/babel-preset-react"
|
"@lingui/babel-preset-react"
|
||||||
],
|
],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"@babel/transform-runtime",
|
"@babel/plugin-transform-runtime",
|
||||||
"@babel/syntax-dynamic-import",
|
"@babel/plugin-syntax-dynamic-import",
|
||||||
"macros"
|
"babel-plugin-macros"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1302,7 +1302,6 @@ msgstr "Names"
|
|||||||
#: src/renderer/components/+workloads-jobs/jobs.tsx:38
|
#: src/renderer/components/+workloads-jobs/jobs.tsx:38
|
||||||
#: src/renderer/components/+workloads-pods/pods.tsx:75
|
#: src/renderer/components/+workloads-pods/pods.tsx:75
|
||||||
#: src/renderer/components/+workloads-statefulsets/statefulsets.tsx:41
|
#: src/renderer/components/+workloads-statefulsets/statefulsets.tsx:41
|
||||||
#: src/renderer/components/app.tsx:37
|
|
||||||
#: src/renderer/components/dock/edit-resource.tsx:91
|
#: src/renderer/components/dock/edit-resource.tsx:91
|
||||||
#: src/renderer/components/dock/install-chart.tsx:122
|
#: src/renderer/components/dock/install-chart.tsx:122
|
||||||
#: src/renderer/components/dock/upgrade-chart.tsx:98
|
#: src/renderer/components/dock/upgrade-chart.tsx:98
|
||||||
@ -1316,6 +1315,7 @@ msgid "Namespace: {0}"
|
|||||||
msgstr "Namespace: {0}"
|
msgstr "Namespace: {0}"
|
||||||
|
|
||||||
#: src/renderer/components/+namespaces/namespaces.tsx:30
|
#: src/renderer/components/+namespaces/namespaces.tsx:30
|
||||||
|
#: src/renderer/components/app.tsx:36
|
||||||
#: src/renderer/components/layout/sidebar.tsx:85
|
#: src/renderer/components/layout/sidebar.tsx:85
|
||||||
msgid "Namespaces"
|
msgid "Namespaces"
|
||||||
msgstr "Namespaces"
|
msgstr "Namespaces"
|
||||||
|
|||||||
@ -1293,7 +1293,6 @@ msgstr ""
|
|||||||
#: src/renderer/components/+workloads-jobs/jobs.tsx:38
|
#: src/renderer/components/+workloads-jobs/jobs.tsx:38
|
||||||
#: src/renderer/components/+workloads-pods/pods.tsx:75
|
#: src/renderer/components/+workloads-pods/pods.tsx:75
|
||||||
#: src/renderer/components/+workloads-statefulsets/statefulsets.tsx:41
|
#: src/renderer/components/+workloads-statefulsets/statefulsets.tsx:41
|
||||||
#: src/renderer/components/app.tsx:37
|
|
||||||
#: src/renderer/components/dock/edit-resource.tsx:91
|
#: src/renderer/components/dock/edit-resource.tsx:91
|
||||||
#: src/renderer/components/dock/install-chart.tsx:122
|
#: src/renderer/components/dock/install-chart.tsx:122
|
||||||
#: src/renderer/components/dock/upgrade-chart.tsx:98
|
#: src/renderer/components/dock/upgrade-chart.tsx:98
|
||||||
@ -1307,6 +1306,7 @@ msgid "Namespace: {0}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/renderer/components/+namespaces/namespaces.tsx:30
|
#: src/renderer/components/+namespaces/namespaces.tsx:30
|
||||||
|
#: src/renderer/components/app.tsx:36
|
||||||
#: src/renderer/components/layout/sidebar.tsx:85
|
#: src/renderer/components/layout/sidebar.tsx:85
|
||||||
msgid "Namespaces"
|
msgid "Namespaces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@ -1303,7 +1303,6 @@ msgstr ""
|
|||||||
#: src/renderer/components/+workloads-jobs/jobs.tsx:38
|
#: src/renderer/components/+workloads-jobs/jobs.tsx:38
|
||||||
#: src/renderer/components/+workloads-pods/pods.tsx:75
|
#: src/renderer/components/+workloads-pods/pods.tsx:75
|
||||||
#: src/renderer/components/+workloads-statefulsets/statefulsets.tsx:41
|
#: src/renderer/components/+workloads-statefulsets/statefulsets.tsx:41
|
||||||
#: src/renderer/components/app.tsx:37
|
|
||||||
#: src/renderer/components/dock/edit-resource.tsx:91
|
#: src/renderer/components/dock/edit-resource.tsx:91
|
||||||
#: src/renderer/components/dock/install-chart.tsx:122
|
#: src/renderer/components/dock/install-chart.tsx:122
|
||||||
#: src/renderer/components/dock/upgrade-chart.tsx:98
|
#: src/renderer/components/dock/upgrade-chart.tsx:98
|
||||||
@ -1317,6 +1316,7 @@ msgid "Namespace: {0}"
|
|||||||
msgstr "Namespace: {0}"
|
msgstr "Namespace: {0}"
|
||||||
|
|
||||||
#: src/renderer/components/+namespaces/namespaces.tsx:30
|
#: src/renderer/components/+namespaces/namespaces.tsx:30
|
||||||
|
#: src/renderer/components/app.tsx:36
|
||||||
#: src/renderer/components/layout/sidebar.tsx:85
|
#: src/renderer/components/layout/sidebar.tsx:85
|
||||||
msgid "Namespaces"
|
msgid "Namespaces"
|
||||||
msgstr "Namespaces"
|
msgstr "Namespaces"
|
||||||
|
|||||||
@ -3,11 +3,9 @@
|
|||||||
import "./ace-editor.scss"
|
import "./ace-editor.scss"
|
||||||
|
|
||||||
import React from "react"
|
import React from "react"
|
||||||
import { observable } from "mobx";
|
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { Ace } from "ace-builds"
|
import AceBuild, { Ace } from "ace-builds"
|
||||||
import { autobind, cssNames } from "../../utils";
|
import { autobind, cssNames } from "../../utils";
|
||||||
import { Spinner } from "../spinner";
|
|
||||||
import { themeStore } from "../../theme.store";
|
import { themeStore } from "../../theme.store";
|
||||||
|
|
||||||
interface Props extends Partial<Ace.EditorOptions> {
|
interface Props extends Partial<Ace.EditorOptions> {
|
||||||
@ -40,39 +38,21 @@ export class AceEditor extends React.Component<Props, State> {
|
|||||||
private editor: Ace.Editor;
|
private editor: Ace.Editor;
|
||||||
private elem: HTMLElement;
|
private elem: HTMLElement;
|
||||||
|
|
||||||
@observable ready = false;
|
constructor(props: Props) {
|
||||||
|
super(props);
|
||||||
async loadEditor() {
|
require("ace-builds/src-noconflict/mode-yaml")
|
||||||
return await import(
|
require("ace-builds/src-noconflict/theme-dreamweaver")
|
||||||
/* webpackChunkName: "ace" */
|
require("ace-builds/src-noconflict/theme-terminal")
|
||||||
"ace-builds"
|
require("ace-builds/src-noconflict/ext-searchbox")
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
loadTheme(theme: string) {
|
|
||||||
return import(
|
|
||||||
/* webpackChunkName: "ace/[request]" */
|
|
||||||
`ace-builds/src-min-noconflict/theme-${theme}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
loadExtension(ext: string) {
|
|
||||||
return import(
|
|
||||||
/* webpackChunkName: "ace/[request]" */
|
|
||||||
`ace-builds/src-min-noconflict/ext-${ext}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
loadMode(mode: string) {
|
|
||||||
return import(
|
|
||||||
/* webpackChunkName: "ace/[request]" */
|
|
||||||
`ace-builds/src-min-noconflict/mode-${mode}`
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get theme() {
|
get theme() {
|
||||||
return themeStore.activeTheme.type == "light"
|
switch (themeStore.activeTheme.type) {
|
||||||
? "dreamweaver" : "terminal";
|
case "light":
|
||||||
|
return "dreamweaver"
|
||||||
|
case "dark":
|
||||||
|
return "terminal";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async componentDidMount() {
|
async componentDidMount() {
|
||||||
@ -82,15 +62,8 @@ export class AceEditor extends React.Component<Props, State> {
|
|||||||
...options
|
...options
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
// load ace-editor, theme and mode
|
|
||||||
const ace = await this.loadEditor();
|
|
||||||
await Promise.all([
|
|
||||||
this.loadTheme(this.theme),
|
|
||||||
this.loadMode(mode)
|
|
||||||
]);
|
|
||||||
|
|
||||||
// setup editor
|
// setup editor
|
||||||
this.editor = ace.edit(this.elem, options);
|
this.editor = AceBuild.edit(this.elem, options);
|
||||||
this.setTheme(this.theme);
|
this.setTheme(this.theme);
|
||||||
this.setMode(mode);
|
this.setMode(mode);
|
||||||
this.setCursorPos(cursorPos);
|
this.setCursorPos(cursorPos);
|
||||||
@ -99,11 +72,9 @@ export class AceEditor extends React.Component<Props, State> {
|
|||||||
this.editor.on("change", this.onChange);
|
this.editor.on("change", this.onChange);
|
||||||
this.editor.selection.on("changeCursor", this.onCursorPosChange);
|
this.editor.selection.on("changeCursor", this.onCursorPosChange);
|
||||||
|
|
||||||
// load extensions
|
if (autoFocus) {
|
||||||
this.loadExtension("searchbox");
|
this.focus();
|
||||||
|
}
|
||||||
if (autoFocus) this.focus();
|
|
||||||
this.ready = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate() {
|
componentDidUpdate() {
|
||||||
@ -143,12 +114,10 @@ export class AceEditor extends React.Component<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async setMode(mode: string) {
|
async setMode(mode: string) {
|
||||||
await this.loadMode(mode);
|
|
||||||
this.editor.session.setMode(`ace/mode/${mode}`);
|
this.editor.session.setMode(`ace/mode/${mode}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async setTheme(theme: string) {
|
async setTheme(theme: string) {
|
||||||
await this.loadTheme(theme);
|
|
||||||
this.editor.setTheme(`ace/theme/${theme}`);
|
this.editor.setTheme(`ace/theme/${theme}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +152,6 @@ export class AceEditor extends React.Component<Props, State> {
|
|||||||
return (
|
return (
|
||||||
<div className={cssNames("AceEditor", className, { hidden }, themeType)}>
|
<div className={cssNames("AceEditor", className, { hidden }, themeType)}>
|
||||||
<div className="editor" ref={e => this.elem = e}/>
|
<div className="editor" ref={e => this.elem = e}/>
|
||||||
{!this.ready && <Spinner center/>}
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,17 +41,10 @@ export class LocalizationStore {
|
|||||||
await this.setLocale(this.activeLang);
|
await this.setLocale(this.activeLang);
|
||||||
}
|
}
|
||||||
|
|
||||||
async load(locale: string) {
|
|
||||||
const { messages } = await import(
|
|
||||||
/* webpackChunkName: "i18n-[request]" */
|
|
||||||
`@lingui/loader!../../locales/${locale}/messages.po`
|
|
||||||
);
|
|
||||||
_i18n.loadLocaleData(locale, { plurals: plurals[locale] });
|
|
||||||
_i18n.load(locale, messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
async setLocale(locale: string) {
|
async setLocale(locale: string) {
|
||||||
await this.load(locale);
|
const catalog = require(`@lingui/loader!../../locales/${locale}/messages.po`);
|
||||||
|
_i18n.loadLocaleData(locale, { plurals: plurals[locale] });
|
||||||
|
_i18n.load(locale, catalog.messages);
|
||||||
|
|
||||||
// set moment's locale before activeLang for proper next render() in app
|
// set moment's locale before activeLang for proper next render() in app
|
||||||
moment.locale(locale);
|
moment.locale(locale);
|
||||||
|
|||||||
@ -167,7 +167,7 @@ export class ThemeStore {
|
|||||||
return this.themes.get(themeId);
|
return this.themes.get(themeId);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const theme: ITheme = await import(
|
const theme: ITheme = require(
|
||||||
/* webpackMode: "lazy", webpackChunkName: "theme/[request]" */
|
/* webpackMode: "lazy", webpackChunkName: "theme/[request]" */
|
||||||
`./themes/${themeId}.json`
|
`./themes/${themeId}.json`
|
||||||
);
|
);
|
||||||
|
|||||||
@ -12,7 +12,6 @@ module.exports = function (config, env) {
|
|||||||
compilerOptions: {
|
compilerOptions: {
|
||||||
jsx: "preserve", // @lingui/babel-preset-react
|
jsx: "preserve", // @lingui/babel-preset-react
|
||||||
target: "es2016", // @lingui/babel-preset-react
|
target: "es2016", // @lingui/babel-preset-react
|
||||||
module: "esnext", // https://webpack.js.org/guides/code-splitting/#dynamic-imports
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return ["babel-loader", loader]
|
return ["babel-loader", loader]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user