2016-12-14 2 views
0

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

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

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

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

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

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

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

При запуске окно электронного Chromium, я сразу же столкнулись с этой проблемой:

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

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

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

Могу ли я сделать неверное предположение о том, как требуется относительное Pathing является выполняется при исполнении браузера 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.

+0

Спасибо за ваш ответ! К сожалению, не работает, что приводит к той же ошибке. К счастью, ваше предложение для var Game = require (__ dirname ....) работает как шарм, хотя я согласен, что он выглядит хрупким и меня беспокоит, что произойдет, когда я хочу упаковать приложение. Я конвертирую этот проект из .Net без узла, поэтому я пытаюсь выполнить шаги в процессе миграции. – user1433070

+1

Проблема в том, что 'controller.js' является модулем CommonJS/Node, но' 'ничего не знает о модулях CommonJS, он просто загрузит содержимое файл в текущий документ, не проходя через загрузчик модуля Node. Поскольку @dvlsg указал, что правильный способ загрузки 'controller.js' - это использовать' require'. –

Смежные вопросы