<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Electron與TypeScript的結合

      Electron與TypeScript的結合

      概述

      本文檔簡要地說明使用Electron與TypeScript構建一個簡單的桌面應用程序。

      項目結構

      my-electron-app/
      ├── dist/                // TypeScript 編譯后的輸出目錄
      ├── src/                 // 源代碼目錄
      │   ├── main.ts          // 主進程代碼
      │   ├── preload.ts       // 預加載腳本
      │   └── renderer.ts      // 渲染進程代碼
      ├── index.html           // 渲染進程的 HTML 文件
      ├── package.json         // 項目配置文件
      ├── tsconfig.json        // TypeScript配置文件
      

      我們先根據上述項目結構,創建空白文件:

      圖片失效即顯示

      配置

      1. package.json 定義項目的入口文件和腳本:
      {
        "name": "my-electron-app",
        "version": "1.0.0",
        "description": "a simple electron demo",
        "main": "./dist/main.js",
        "author": "bing",
        "license": "MIT",
        "scripts": {
          "build": "tsc",
          "start": "npm run build && electron ./dist/main.js"
        }
      }
      
      1. 安裝依賴
      圖片失效即顯示
      # 設置環境臨時變量
      set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
      # 安裝Electron依賴
      yarn add electron --dev
      

      安裝完成:

      圖片失效即顯示

      package.json 文件新增一項:

      圖片失效即顯示
      1. tsconfig.json 配置TypeScript編譯選項:
      {
        "compilerOptions": {
          "target": "ES6",
          "module": "commonjs",
          "outDir": "./dist",
          "rootDir": "./src",
          "strict": true,
          "esModuleInterop": true,
          "skipLibCheck": true,
          "forceConsistentCasingInFileNames": true
        },
        "include": ["src/**/*"]
      }
      
      1. launch.json 配置 VS Code 調試環境:
      {
        "version": "0.2.0",
        "compounds": [
          {
            "name": "Main + renderer",
            "configurations": ["Main", "Renderer"],
            "stopAll": true
          }
        ],
        "configurations": [
          {
            "name": "Renderer",
            "port": 9222,
            "request": "attach",
            "type": "chrome",
            "webRoot": "${workspaceFolder}"
          },
          {
            "name": "Main",
            "type": "node",
            "request": "launch",
            "cwd": "${workspaceFolder}",
            "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
            "windows": {
              "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
            },
            "args": [".", "--remote-debugging-port=9222"],
            "outputCapture": "std",
            "console": "integratedTerminal"
          }
        ]
      }
      

      配置前:

      圖片失效即顯示

      配置后:

      圖片失效即顯示

      請將運行和調試選項切換到 “Main+Render”:

      圖片失效即顯示

      代碼實現

      1. main.ts 主進程負責管理應用程序的生命周期和窗口:
      import { app, BrowserWindow, ipcMain } from "electron";
      import path from "path";
      
      let mainWindow: BrowserWindow | null;
      
      function createWindow(): void {
        mainWindow = new BrowserWindow({
          width: 800,
          height: 600,
          webPreferences: {
            preload: path.join(__dirname, "preload.js"), // Preload script
          },
        });
      
        // Load the HTML file for the renderer process
        mainWindow.loadFile(path.join(__dirname, "../index.html"));
      
        mainWindow.on("closed", () => {
          mainWindow = null;
        });
      }
      
      app.on("ready", createWindow);
      
      app.on("window-all-closed", () => {
        if (process.platform !== "darwin") {
          app.quit();
        }
      });
      
      app.on("activate", () => {
        if (mainWindow === null) {
          createWindow();
        }
      });
      
      // Listen for messages from the renderer process
      ipcMain.handle("get-app-info", () => {
        return {
          appName: app.getName(),
          appVersion: app.getVersion(),
        };
      });
      
      1. preload.ts 預加載腳本用于在主進程和渲染進程之間安全地傳遞數據:
      import { contextBridge, ipcRenderer } from 'electron';
      
      // Expose a safe API to the renderer process
      contextBridge.exposeInMainWorld('electronAPI', {
        getAppInfo: (): Promise<{ appName: string; appVersion: string }> => ipcRenderer.invoke('get-app-info'),
      });
      
      1. renderer.ts 渲染進程負責處理用戶界面邏輯:
      // Define the ElectronAPI interface
      interface ElectronAPI {
        getAppInfo: () => Promise<{ appName: string; appVersion: string }>;
      }
      
      // Retrieve electronAPI from the preload script
      const electronAPI: ElectronAPI = (
        window as unknown as { electronAPI: ElectronAPI }
      ).electronAPI;
      
      // Fetch application information and display it on the page
      electronAPI.getAppInfo().then((info) => {
        const appInfoElement = document.getElementById("app-info");
        if (appInfoElement) {
          appInfoElement.innerText = `App: ${info.appName}, Version: ${info.appVersion}`;
        }
      });
      
      1. index.html 渲染進程的 HTML 文件定義了用戶界面:
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8" />
          <meta name="viewport" content="width=device-width, initial-scale=1.0" />
          <meta
            http-equiv="Content-Security-Policy"
            content="default-src 'self'; script-src 'self';"
          />
          <title>Electron + TypeScript Demo</title>
        </head>
        <body>
          <h1>Hello, Electron!</h1>
          <div id="app-info">Loading app info...</div>
          <script src="./dist/renderer.js"></script>
        </body>
      </html>
      

      現在,我們已填充除 dist目錄下 外所有的文件:

      圖片失效即顯示

      運行項目

      1. 編譯 TypeScript 代碼:
      圖片失效即顯示
      npm run build
      
      圖片失效即顯示
      1. 啟動 Electron 應用:
      圖片失效即顯示
      npm start
      

      效果:

      圖片失效即顯示

      聲明

      內容準確性: 我會盡力確保所分享信息的準確性和可靠性,但由于個人知識有限,難免會有疏漏或錯誤。如果您在閱讀過程中發現任何問題,請不吝賜教,我將及時更正。

      AI: 文章部分代碼參考了DeepSeek和ChatGTP大語言模型生成的內容。

      posted on 2025-03-05 17:55  wubing7755  閱讀(251)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国产精品午夜福利资源| 亚洲成av人片在线观看www| 亚洲av区一区二区三区| 暖暖 在线 日本 免费 中文| 亚洲国产成人精品激情姿源| 毛片亚洲AV无码精品国产午夜| 99久久婷婷国产综合精品青草漫画 | 日韩永久永久永久黄色大片| 久久精品国产99国产精品严洲| 午夜三级成人在线观看| 久久91精品牛牛| 亚洲天堂在线免费| 视频一区视频二区亚洲视频 | ww污污污网站在线看com| av性色av久久无码ai换脸 | 国精品无码人妻一区二区三区 | 蜜桃av色偷偷av老熟女| 日韩深夜免费在线观看| 久久国产成人av蜜臀| 无码综合天天久久综合网| h无码精品动漫在线观看| 中文字幕乱偷无码av先锋蜜桃| 久热中文字幕在线精品观| 2021国产精品视频网站| 国产精品久久久久aaaa| 在线观看热码亚洲AV每日更新| 精品亚洲无人区一区二区| 豆国产97在线 | 亚洲| 亚洲熟妇中文字幕五十路| 国产福利在线观看免费第一福利 | 亚洲午夜性猛春交xxxx| 国产第一页浮力影院入口| 欧美丰满熟妇xxxx性ppx人交| 亚洲国产高清精品线久久| 久久国内精品自在自线91| 风韵丰满熟妇啪啪区老熟熟女| 18禁无遮拦无码国产在线播放| 中文字幕人妻av12| 国产黑色丝袜在线播放| 蜜臀av久久国产午夜福利软件| 米奇影院888奇米色99在线|