0

我正在尝试使用 Electron 应用程序,并且在尝试从 Chromium 浏览器窗口中运行的另一个脚本中要求模块时遇到问题。无论我做什么来指定相对路径,我总是遇到关于无法找到模块的相同错误。

我的项目是这样设置的:

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

我的 index.html 是 electron 启动时默认打开的页面,它将 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 文件的相对路径,但无论我做什么样的调整,我总是会遇到这个错误。我认为这不仅仅是语法错误,因为我在测试文件夹下的规范都在运行并通过,它成功地使用了这样的要求:

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

我是否对从 Chromium 浏览器执行时需要相对路径的方式做出了错误的假设?任何帮助表示赞赏!

4

1 回答 1

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');

不过,我不能全心全意地建议其中任何一个选项。看起来很脆弱。

老实说,我以前从未注意到这一点,因为我通常在与我的index.html.

于 2016-12-15T00:51:07.267 回答