2015-12-17 2 views
2

У меня довольно неприятная, но, вероятно, простая проблема, которую я просто не могу понять.RequireJS: Не удается найти модуль «domReady»

В файле машинопись я определил следующую строку:

import test1 = require('domReady'); 

Этот модуль «domReady» определен в main.js файл, который загружается в качестве точки входа для RequireJS. Это определение, как следует:

require.config({  
    paths: {  
     'domReady': '../domReady', 
    } 

... Однако в моем файле машинопись я просто получить «не может найти модуль„domReady“», и это сводит меня с ума, как я дважды проверил Pathing в файл и он действительно находится в правильном месте с правильным именем. Кроме того, я вполне уверен, что файл domReady.js совместим с AMD, поэтому он должен правильно определить внешний модуль! (domReady GitHub Link).

Я серьезно не могу понять, почему модуль не может быть найден в инструкции импорта. Есть ли у кого-нибудь идеи, что может быть проблемой?

EDIT 1

Структура каталогов выглядит следующим образом:

. 
+--App 
| +--main.js 
| +--dashboard.js 
+--domReady.js 

Оператор импорта происходит в файле "dashboard.js", и конфигурации для require.js происходит в " main.js».

+0

Пожалуйста, покажите свою структуру каталогов –

+0

Оригинальное сообщение было обновлено :) – CodingBeagle

+0

Выполняется 'main.js' перед' dashboard.js'? –

ответ

3

Для того чтобы TypeScript мог найти модуль, вы должны фактически предоставить информацию о модуле TypeScript.

TypeScript doesn’t yet support AMD-style paths configuration, он никогда не использует вызовы в вашем JavaScript-коде (например, require.config()), чтобы настроить себя, и он не будет обрабатывать файлы JavaScript на диске в качестве модулей при компиляции. Поэтому прямо сейчас вы ничего не делаете, чтобы дать компилятору необходимую ему информацию для успешного выполнения инструкции import.

Для вашего кода для компиляции без ошибок, вы должны явно объявить декларацию окружающей среды для модуля импортируемого в компиляторе, в отдельном файле d.ts:

// in domReady.d.ts 
declare module 'domReady' { 
    function domReady(callback:() => any): void; 
    export = domReady; 
} 

Затем включить это д.тс в списке файлов вы передаете компилятору:

tsc domReady.d.ts App/main.ts App/dashboard.ts 

Любая другая третья сторона JavaScript код, который вы импортируете также нуждается в декларации окружающей среды для успешной компиляции; DefinitelyTyped предоставляет файлы d.ts для многих из них.

0

У меня были проблемы до того, когда ключ пути и имя каталога или имя файла совпадают (в вашем случае domReady). Может не работать, но стоит дать ему быструю попытку, т.е.

либо

'domReadyModule': '../domReady', 
require('domReadyModule') 

или переименовывать domReady.js до, например, domReady-1.0.js и использовать

'domReady': '../domReady-1.0', 
require('domReady') 

Если это не сработает, я бы проверить относительные каталоги между main.js и файл, который делает require, или же попробуйте импортировать другую библиотеку таким же образом, или, наконец, сравнить с другие импортируемые вами библиотеки.

Удачи, надеюсь, что вы разрешите проблему!

Смежные вопросы