Je možné vytvořit Electorn aplikaci, která se sestavuje pouze pro platformu kódu?

0

Otázka

Já se vysvětlit, moje otázka pro velmi specifický případ použití.

Řekněme, že jsem navržen tak, můj kód takto:

enter image description here

A to je obsah:

src/vnitřní/vnitřní.darwin.ts:

export default function logger() {
    console.log('Darwin Logger');
}

src/vnitřní/vnitřní.systém windows.ts:

export default function logger() {
    console.log('Windows Logger');
}

src/vnitřní/vnitřní.ts:

POZNÁMKA: export default - to je povinné

import LOGGER from '???????????';

export default class A {
    public static logger() {
         LOGGER();
    }
}

Takže v podstatě, když jsem se sestavit kód systému Windows, chci importovat inner.windows.ts kód. Při použití Mac kód - inner.darwin.ts kód.

Vím, že mohu kontrolovat vyloučit soubory v tsconfig.json. Takže když budu vytvářet aplikace pro Windows, budu kódu:

"exclude": ["**/*.darwin.ts"]

A když jsem se vytvořit jeden Mac:

"exclude": ["**/*.windows.ts"]

Nicméně, to nepomohlo, pro vyřešení import problém.

Vím, že může spustit kód závisí na základní platformu, pomocí process.platform, ale to není dělat práci. Chci, aby výstup aplikace systému Windows, aby se více malé velikosti - a ignorovat Mac kód. Pokud bych použil tohle process.platform - Mac kód by stále existují v hlubších aplikace systému Windows.

Nějaké rady?

Může Webpack udělat něco, co pomůže? Jsem otevřený pro jakékoliv změny kódu tak dlouho, jak kód je dobře definované a rozdělené, a konečný výsledek je, že mám jen Darwin kód a kód systému Windows

electron javascript typescript
2021-11-16 20:28:01
1

Nejlepší odpověď

3

Takže řešení je tichá, jednoduché. Vše, co jsem musel udělat, je pomocí Webpack plugin. Nejlepší Plugin, aby se vešly tento úkol je NormalModuleReplacementPlugin která je poskytována z krabice tím, že Webpack sám.

Na exclude v tsconfig.ts je již rozumné v rámci tohoto řešení.

Jednoduše poskytnout následující plugin:

new webpack.NormalModuleReplacementPlugin(
    /darwin/,
    function (resource) {
    resource.request = resource.request.replace(
        /darwin/,
        'windows',
    );
    }
),

Toto nastavení přepíše importovat do darwin soubor do winodws soubor.

Nyní, ve vývoji, oba soubory existují, ale v kompilaci - pouze jeden z nich bude existovat.

inner.ts jednoduše se stává:

import LOGGER from './inner.darwin';

export default class A {
    public static logger() {
         LOGGER();
    }
}

Samozřejmě, že by mohl být klid těžkopádné jít do webpack.config.ts každý build, tak určitě můžeme spustit některé další webpack scénář se rozhodnout, na které hlubších stavět, například:

 const appTarget = env.APP_TARGET || 'darwin'; 

A pak stačí použít tuto proměnnou v rámci plugin, a spustit npm stavět skript poskytuje APP_TARGET argument.

2021-11-20 10:52:04

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................