Электрон - требующий модуль в скрипте 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
,