Совместное использование модуля ESM ".js" в среде Node / Electron - PullRequest
0 голосов
/ 29 ноября 2018

В моем приложении Electron у меня есть большой файл constants.js, который экспортируется и доступен в процессе Render (Web, модули ESM).Я также хотел бы импортировать этот файл в Основной процесс приложения (Node, CJS Modules).

Даже с новыми экспериментальными модулями, которые доступны в последних версиях Electron / Node,для этого потребуется изменить расширение моего файла с constants.js на constants.mjs.Поскольку этот файл часто упоминается во всем приложении, изменение расширения файла не является опцией.

Можно ли совместно использовать мой файл constants.js как для визуализации, так и для основных процессов?

Структура проекта:

root
│
├── build (main process)
│   ├── mainElectron.js
│   └── package.json
│
├── source (render process)
│   └── js
│       └── index.js
│       └── support
│           └── constants.js
│
└── package.json

constants.js

export {

    Location,
    People,
};

const Location = {

    COUNTRY: "Canada",
    CITY: "Montreal"
};

const People = {

    OWNER: "Mr. Owner",
    MANAGER: "Mrs. Manager",
    DEVELOPER: "Mr. Developer",
};

index.js (Процесс визуализации,Web ESM)

import * as C from "../support/constants.js";

console.log(`${C.People.DEVELOPER} lives in ${C.Location.CITY}`);

mainElectron.js (основной процесс, узел CJS)

const electron = require("electron");
const app = electron.app;

app.on("ready", () => {

    //How to access constants.js file here?
});

1 Ответ

0 голосов
/ 01 декабря 2018

Для тех, кто может столкнуться с этим вопросом в будущем с той же проблемой, я решил ее, используя:

ESM: модули ECMAScript завтра! .

Далее я реструктурировал свой код так, чтобы файл констант, которым я делюсь между Основным процессом и Процессом рендеринга , теперь находился в моей папке ./buildс файлами Main Process .

Структура проекта:

root
│
├── build (main process)
│   ├── js
│   │   ├── main
│   │   │   ├── mainElectronESM.js
│   │   │   └── mainElectron.js
│   │   └── support
│   │       └── constants.js
│   └── package.json
│
├── source (render process)
│   └── js
│       └── index.js
│
└── package.json

constants.js

export {

    Location,
    People,
};

const Location = {

    COUNTRY: "Canada",
    CITY: "Montreal"
};

const People = {

    OWNER: "Mr. Owner",
    MANAGER: "Mrs. Manager",
    DEVELOPER: "Mr. Developer",
};

mainElectronESM.js (основной процесс, узел CJS)

require = require("esm")(module);
module.exports = require("./mainElectron.js");

mainElectron.js (основной процесс, узел ESM)

import { app } from "electron";
import * as C from "../support/constants.js";

app.on("ready", () => {

    console.log(`${C.People.DEVELOPER} lives in ${C.Location.CITY}`);
});

index.js (Render Process, Web ESM)

import * as C from "../../build/js/support/constants.js";

console.log(`${C.People.DEVELOPER} lives in ${C.Location.CITY}`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...