Электрон - требующий модуль в скрипте Chromium

Я пытаюсь работать с приложением Electron, и у меня возникла проблема с попыткой запросить модуль из другого скрипта, работающего в окне браузера Chromium. Независимо от того, что я делаю, чтобы указать относительный путь, я всегда сталкиваюсь с одной и той же ошибкой из-за невозможности найти модуль.

Мой проект настроен так:

    index.html
    scripts
        controllers
            controller.js
        models
            game.js
        tests
            spec
                gameSpec.js

Мой index.html, который является страницей, которая открывается по умолчанию при запуске электрона, загружает controller.js как обычный скрипт в конце тега body.

<script src="scripts/controllers/controller.js"></script>

controller.js имеет следующий код вверху:

var Game = require("../models/game.js");
.... some other code .....
var game = new Game();

Запустив окно электронного хрома, я сразу же столкнулся с этой проблемой:

Uncaught Error: Cannot find module '../models/game.js'

Я предполагаю, что мне нужен относительный путь от файла controller.js к файлу game.js, который он импортирует, но независимо от того, какую настройку я выполняю, я всегда получаю эту ошибку. Я не думаю, что это просто синтаксическая ошибка, так как у меня есть спецификация в папке tests, которая все работает и проходит успешно, которая использует требование вроде этого:

var Game = require("../../models/game.js");
describe("Game", function () { ... });

Я делаю неправильное предположение о том, как требуется относительный путь при выполнении из браузера Chromium? Любая помощь приветствуется!

1 ответ

Решение

Возможно, это скорее обходной путь, чем ответ, но если вы поменяете местами включение в скрипт:

<script src="scripts/controllers/controller.js"></script>

К этому:

<script>require('./scripts/controllers/controller.js')</script>

Тогда относительные пути должны работать так, как вы ожидаете.


Я думаю, что когда вы включаете сценарии с src атрибут, то внутренний контекст текущего рабочего каталога в этом файле является корнем приложения.

Зачем? Я не уверен на 100%, если честно. Ограничение на то, как файлы должны быть загружены при включении в качестве сценария src? Если вы действительно хотите продолжать использовать src атрибут, они будут технически работать в controller.js,

var Game = require(__dirname + '/scripts/models/game.js');
// or
var Game = require('./scripts/models/game.js');

Однако я не могу искренне предложить ни один из этих вариантов. Кажется хрупким.

Честно говоря, я никогда раньше этого не замечал, потому что я обычно включаю точку входа javascript в свое приложение в том же месте, что и мой index.html,

Другие вопросы по тегам