Electron——需要 Chromium 脚本中的模块

Electron -- requiring module in Chromium script

我正在尝试开发 Electron 应用程序,但在尝试从 Chromium 浏览器 window 中的另一个脚本 运行ning 中请求模块时遇到了问题。无论我如何指定相对路径,我总是遇到无法找到模块的相同错误。

我的项目是这样设置的:

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

我的 index.html,这是电子启动时默认打开的页面,在 body 标签的末尾加载 controller.js 作为普通脚本。

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

controller.js 顶部有以下代码:

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

在启动 electron Chromium window 后,我立即 运行 遇到了这个问题:

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

我的假设是,我需要一个从 controller.js 文件到它正在导入的 game.js 文件的相对路径,但无论我进行何种调整,我总是得到那个错误。我不认为这只是一个语法错误,因为我在测试文件夹下有规范 运行ning 并通过它成功地使用了这样的要求:

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

我是否对从 Chromium 浏览器执行时如何完成 require 相对路径做出了错误的假设?感谢您的帮助!

也许更多的是一种解决方法而不是答案,但是如果你从这个交换你的脚本包含:

<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 所在的相同位置包含一个指向我的应用程序的 javascript "entry" 点。