我正在尝试开发一个 Electron 应用程序,但在尝试从 Chromium 浏览器窗口中运行的另一个脚本中获取模块时遇到了问题。无论我如何指定相对路径,我总是会遇到无法找到模块的相同错误。
我的项目是这样设置的:
index.html
scripts
controllers
controller.js
models
game.js
tests
spec
gameSpec.js
我的index.html是Electron启动时默认打开的页面,它在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 窗口后,我立即遇到了这个问题:
Uncaught Error: Cannot find module '../models/game.js'
我的假设是我需要从controller.js 文件到它正在导入的game.js 文件的相对路径,但无论我进行何种调整,我总是会收到该错误。我不认为这只是一个语法错误,因为我在测试文件夹下的规范全部运行并通过,它成功地使用了这样的要求:
var Game = require("../../models/game.js");
describe("Game", function () { ... });
关于从 Chromium 浏览器执行时如何完成需要相对路径的假设,我是否做出了错误的假设?如有任何帮助,我们将不胜感激!
最佳答案
也许更多的是一种解决方法而不是答案,但如果您从此交换脚本包含:
<script src="scripts/controllers/controller.js"></script>
对此:
<script>require('./scripts/controllers/controller.js')</script>
然后相对路径应该按您的预期工作。
<小时/>我认为当您包含带有src
属性的脚本时,那么该文件中当前工作目录的内部上下文就是应用程序的根目录。
src
包含时,文件加载方式有何限制?如果您确实想继续使用src
属性,那么从技术上讲,这些可以在controller.js
中使用。
var Game = require(__dirname + '/scripts/models/game.js');
// or
var Game = require('./scripts/models/game.js');
不过,我不能全心全意地建议其中任何一个选项。看起来很脆弱。
说实话,我以前从未注意到这一点,因为我通常在与 index.html
相同的位置包含一个指向我的应用程序的 javascript“入口”点。
关于javascript - Electron——Chromium 脚本中需要模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41154033/