Ищите простой рабочий пример Electron v8 и TypeScript - PullRequest
3 голосов
/ 18 февраля 2020

Прости простоту моего вопроса истца, я близок к своему остроумию.

Я ищу работающий простой пример Electron v8 и TypeScript. Это не должно включать WebPack, Babel, React или что-то еще. Ничто из того, что я нашел, похоже, не работает с Electron v8.

Обновление

Мое предыдущее утверждение напоминает мне линию Макбета , это рассказ, рассказанный идиотом, полный звука и ярости, Ничего не значит , поэтому давайте на этот раз изложим проблему в detail .

* * * * * * * * * Пример электронного и машинописного текста не демонстрирует следующее:

  • Использование import для узлов Node в процессе рендеринга
  • Использование import для моих собственных прикладных модулей в процессе рендеринга.

Попытка сделать это получила нет ошибок из tsc, но спровоцировал ошибку времени выполнения

ReferenceError: exports is not defined[Learn More]
exports.__esModule = true

Использование require вместо import, особенно для таких классов, как EventEmitter upset VS Code, который предупреждал

'EventEmitter' refers to a value, but is being used as a type here.ts(2749)

... так что это шаг назад.

Установка target в tsconfig.json в ES2018 означает, что я могу использовать модули ES6 и синтаксис import для своих собственных модулей хотя для работы нужен суффикс .js.

import {blah} from './MyModule.js'` // Shouldn't need that suffix! 

VS Код создает впечатление, что я могу import Узловые модули, но он все еще не работает во время выполнения.

Uncaught TypeError: Failed to resolve module specifier "events". Relative references must start with either "/", "./", or "../".

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Вам потребуются четыре вещи: package.json, tsconfig.json, index.ts и index.html.

Мой пример основан на учебнике Electron и сообщение в блоге о работе с Electron и TypeScript .

. package.json необходимо ввести зависимости Electron и TypeScript, запустить сборку TypeScript и запустить Electron.

{
  "name": "electron-ts",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "prestart": "tsc",
    "start": "electron ."
  },
  "devDependencies": {
    "electron": "8.0.1",
    "typescript": "3.7.5"
  }
}

Предварительный сценарий компилирует TypeScript и запускает Electron, используя проект в качестве каталога приложения. Я не знаю минимальной необходимой версии TypeScript, но это что-то 3.

tsconfig.json необходимо установить некоторые параметры компилятора и определить, что собирать при запуске tsc.

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": false,
    "suppressImplicitAnyIndexErrors": true 
  },
  "exclude": ["node_modules"] 
}

Это скомпилирует любые файлы TypeScript, которые он найдет за пределами node_modules, и сгенерирует JavaScript рядом с ними.

index.ts необходимо создать окно браузера и загрузить целевую страницу.

import { app, BrowserWindow } from 'electron';

function createWindow () {
  let win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  });
  win.loadFile('index.html');
}

app.allowRendererProcessReuse = true;
app.whenReady().then(createWindow);

Это некоторый шаблонный код для запуска Electron, все типы включены.

Наконец, index.html должен отобразить то, что вы можете распознать.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
    <!-- https://electronjs.org/docs/tutorial/security#csp-meta-tag -->
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using node <script>document.write(process.versions.node)</script>,
    Chrome <script>document.write(process.versions.chrome)</script>,
    and Electron <script>document.write(process.versions.electron)</script>.
  </body>
</html>

Это будет отобразить версии узлов, Chrome и Electron.

При наличии этих файлов в одном каталоге запуск npm start должен скомпилировать TypeScript и запустить приложение Electron.

0 голосов
/ 16 апреля 2020

Я нашел решение, которое я подробно опишу здесь, и вы можете найти в коде здесь .

Вы можете использовать import в процессе рендеринга как для модулей Node, так и для ваших собственных модулей, внося эти изменения:

  1. При создании BrowserWindow в основном процессе установите nodeIntegration до true.
  2. При загрузке кода JavaScript изнутри страницы HTML используйте <script>require('./renderer.js')</script> вместо более обычного <script src="./renderer.js"></script>.

Credit поскольку большая часть этого идет к @ kuba-orlik в этом посте , который отправил меня в правильном направлении.

0 голосов
/ 22 февраля 2020

Я не смог найти ни одного простого примера начертания машинописи для электронов ... поэтому я создал свой собственный.

Вот мой репозиторий . Он основан на официальном стартере быстрого старта (но с машинописью).

Я также добавил электронный конструктор для простого создания мешающих пакетов.

# install dependencies
$ npm install

# compile typescript files
$ npm run compile

# watch typescript files for changes
$ npm run watch

# run the app
$ npm start

# create distributable packages for specific platforms
$ npm run dist-linux
$ npm run dist-mac
$ npm run dist-windows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...