2016-12-14 11 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'); 

나는 이러한 옵션 중 하나를 제안 할 수는 없습니다. 깨지기 쉬운 것 같아.

사실 내 index.html과 동일한 위치에 내 응용 프로그램에 자바 스크립트 "진입 점"이 포함되어 있기 때문에 솔직히이 사실을 알지 못했습니다.

+0

답장을 보내 주셔서 감사합니다. 불행히도 가 작동하지 않아 동일한 오류가 발생합니다. 다행히 var 게임에 대한 귀하의 제안 = require (__ dirname ....)는 매력처럼 작동하지만, 나는 그것이 깨지기 쉬운 것처럼 보이고 앱을 패키징하고 싶을 때 무슨 일이 생길지 염려합니다. 나는 노드없이이 프로젝트를 .Net에서 변환 할 것이므로 마이그레이션 단계에서 아기 단계를 밟으려고한다. – user1433070

+1

여기에서'controller.js'는 CommonJS/Node 모듈이지만''는 CommonJS 모듈에 대해 아무것도 모르고 있습니다. 파일을 노드의 모듈 로더를 거치지 않고 현재 문서에 저장합니다. @dvlsg가'controller.js'를로드하는 정확한 방법은'require'를 사용하는 것입니다. –