2014-04-18 2 views
2

웹 작업자의 타이프 스크립트에서 외부 모듈을 사용하려고하는데 문제가 있습니다. 테스트 예제의 코드는 모두 www.windward.net/temp/WebWorkerRequireJs.zip (아래 나열된 주요 사항)입니다.웹 작업자의 타이프 스크립트로 외부 모듈 가져 오기

내가 원하는 타이프 스크립트 (이 메인 스레드에서 잘 작동은 다음과 같습니다

import myClass = require('my-class'); 
class WorkerThread { 
} 
self.onmessage = function (e) { 
    console.log("client received message = " + e.data); 
    var mc = new myClass.MyClass(); 
    console.log("worker thread toUpper = " + mc.toUpper("dave")); 
    self.postMessage("from client"); 
} 

이 정의로 실패 다음과 같은 자바 스크립트가 정의되어 있지 생성 :

define(["require", "exports", 'my-class'], function(require, exports, __myClass__) { 
    var myClass = __myClass__; 

    var WorkerThread = (function() { 
     function WorkerThread() { 
     } 
     return WorkerThread; 
    })(); 
    self.onmessage = function (e) { 
     console.log("client received message = " + e.data); 
     var mc = new myClass.MyClass(); 
     console.log("worker thread toUpper = " + mc.toUpper("dave")); 
     self.postMessage("from client"); 
    }; 
}); 
//# sourceMappingURL=worker-thread.js.map 

그래서 1 단계, importScripts를 추가하고 .js 파일을 호출했습니다.

importScripts('../../scripts/require.js'); 

define(["require", "exports", 'my-class'], function(require, exports, __myClass__) { 
    var myClass = __myClass__; 

    var WorkerThread = (function() { 
     function WorkerThread() { 
     } 
     return WorkerThread; 
    })(); 
    self.onmessage = function (e) { 
     console.log("client received message = " + e.data); 
     var mc = new myClass.MyClass(); 
     console.log("worker thread toUpper = " + mc.toUpper("dave")); 
     self.postMessage("from client"); 
    }; 
}); 
//# sourceMappingURL=worker-thread.js.map 

이것은 작동하지 않고 ROR :

Uncaught Error: Mismatched anonymous define() module: function (require, exports, __myClass__) { 
    var myClass = __myClass__; 

    var WorkerThread = (function() { 
     function WorkerThread() { 
     } 
     return WorkerThread; 
    })(); 
    self.onmessage =...<omitted>...ch 

내가 다음 전환 "요구"를 "정의"이것은 일 : 질문에 이르게

importScripts('../../scripts/require.js'); 

require(["require", "exports", 'my-class'], function(require, exports, __myClass__) { 
    debugger; 
    var myClass = __myClass__; 

    var WorkerThread = (function() { 
     function WorkerThread() { 
     } 
     return WorkerThread; 
    })(); 
    self.onmessage = function (e) { 
     console.log("client received message = " + e.data); 
     var mc = new myClass.MyClass(); 
     console.log("worker thread toUpper = " + mc.toUpper("dave")); 
     self.postMessage("from client"); 
    }; 
}); 
//# sourceMappingURL=worker-thread.js.map 

- 나는 타이프 라이터이 너무가 실행 생성하는 얻는 방법을. typescript 부분을 호출하는 초기 웹 작업자 응용 프로그램 인 기본 javascript 파일을 설정하는 솔루션입니까? 그렇다면 어떻게 설정해야합니까?

또는 typescript 컴파일러에 define에서 import 및 importScripts()를 삽입하도록 변경하는 해결책이 있습니까?

업데이트 : 기본 웹 작업자 파일이 자바 스크립트 파일 인 것처럼 보입니다. importScripts()와 주요 typescript 클래스가 필요합니다. 그 클래스를 생성하면 거기에서 실행됩니다. 그리고 그 시점에서 "통합"이 모든 작업을 "정의"하는 타이프 스크립트 "가져 오기"가 있습니다. 지금까지 ...

답변

0

작업자 파일은 AMD 로더에 의해로드되지 않고 브라우저에 의해로드됩니다. 따라서 AMD 코드 생성을 중단하고 원시 "필요"호출을 직접 사용해야합니다.

+0

웹 작업자에게 가져 오기 명령문을 사용할 수 없다는 뜻입니까? 그렇다면 거대한 문제입니다. 또는 requireJS (how?)를 구성하고 가져 오기를 수행 할 수있는 .js 파일 인 주 파일로이 파일을 설정할 수 있습니까? 덕분에 –

+0

수입품을 사용할 수 있습니다 : '옵션 모듈 적재 및 기타 고급 적하 시나리오': https://typescript.codeplex.com/wikipage?title=Modules%20in%20TypeScript&referringTitle=Documentation 원시는 전화가 필요합니다 – basarat

+1

안녕하세요; 나는 아직도 여기에 붙어있다. 나는이 프로젝트의 기초를 보여주기 위해 샘플 프로젝트를 만들었고, 무엇이 효과가 있으며 작동하지 않는지 발견했다. 하지만 내가 만드는 모든 .js 파일을 손으로 편집하지 않고 타이프 스크립트를 사용하는 방법을 알아낼 수는 없습니다. 방법이 있습니까? 덕분에 - 데이브 –

관련 문제