2016-12-14 44 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(); 

在啓動電子鉻窗口,我立刻碰到這個問題:

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

我的假設是,我需要一個從controller.js文件到它正在導入的game.js文件的相對路徑,但無論我做什麼樣的調整,我都會得到這個錯誤。我不認爲這是一個純粹的語法錯誤,因爲我有測試下的規範文件夾中所有正在運行和傳球成功地使用需要這樣的:

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

+0

感謝您的回覆!不幸的是,不起作用,導致相同的錯誤。幸運的是你的建議var Game = require(__ dirname ....)就像一種魅力,雖然我認爲它看起來很脆弱,並且讓我擔心我想打包應用程序時會發生什麼。我將這個項目從沒有Node的.Net轉換而來,所以我試圖在遷移中採取寶貝步驟。 – user1433070

+1

這裏的問題是'controller.js'是一個CommonJS/Node模塊,但是'