Проблема с импортом в TypeScript/Electron.js

#javascript #import #electron

#javascript #импорт #electron

Вопрос:

У меня есть файл index.ts :

 import { app, BrowserWindow } from 'electron'
let win

app.on('ready', () => {
  win = new BrowserWindow({
    minHeight: 640,
    minWidth: 480,
    frame:false
  })
  win.loadFile('index.html')
})
  

Если я попытаюсь запустить с помощью: npm start , я получу сообщение об ошибке:

 import { app, BrowserWindow } from 'electron'
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:1051:16)
    at Module._compile (internal/modules/cjs/loader.js:1101:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1166:10)
    at Module.load (internal/modules/cjs/loader.js:981:32)
    at Module._load (internal/modules/cjs/loader.js:881:14)
    at Function.Module._load (electron/js2c/asar.js:769:28)
    at loadApplicationPackage (D:VS ProjectsElectron Appnode_moduleselectrondistresourcesdefault_app.asarmain.js:109:16)
    at Object.<anonymous> (D:VS ProjectsElectron Appnode_moduleselectrondistresourcesdefault_app.asarmain.js:155:9)
    at Module._compile (internal/modules/cjs/loader.js:1145:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1166:10)
  

Мой package.json :

 {
  "name": "electron-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.ts",
  "dependencies": {
    "electron": "^10.1.2"
  },
  "devDependencies": {},
  "scripts": {
    "start": "electron .",
    "test": "echo "Error: no test specified" amp;amp; exit 1"
  },
  "author": "",
  "license": "ISC",
  "type": "module"
}

  

Как я могу это решить?

Комментарии:

1. Electron не будет работать с инструкциями импорта. Он использует среду на основе Nodejs, которая не поддерживает этот синтаксис. Вместо этого вы должны использовать require.

2. Смотрите страницу Начало работы для electron

3. О, извините, я допустил ошибку! Это не JS, я использую Typescript с electron.

4. И что это за дополнительная настройка?

5. Ладно, это хоть что-то… Спасибо, @Chris! Вы можете сделать это в качестве ответа

Ответ №1:

Похоже, вы пытаетесь использовать TypeScript с Electron. У Electron есть доступные типы, однако он напрямую не поддерживает выполнение TypeScript прямо из коробки. Вам нужно будет выполнить некоторые дополнительные шаги, чтобы все заработало. Это немного выходит за рамки ответа и должно быть скорее учебным пособием или примером, поэтому я приведу вам пример из GitHub.

Вы можете просмотреть пример начала работы с TypeScript и Electron здесь .

Ответ №2:

Electron проходит через node.js и node.js отстает и использует синтаксис импорта commonjs.

Для импорта мы делаем:

 const {app} = require("electron");

// equivalent to
//import {app} from 'electron' <- don't use in electron
  

для экспорта мы делаем:

 module.exports = app;

// equivalent to
//export default app; <- don't use in electron