2016-05-06 4 views
8

Typescript не находит модуль в этом импорте import ga from 'googleAnalytics';Машинопись не может найти модуль, который был переведенный с SystemJS

SystemJS знает, где найти модуль, так как он был сопоставлен фронт так:

map: { 
    '@angular': 'node_modules/@angular', 
    'rxjs': 'node_modules/rxjs', 
    'underscore': 'node_modules/underscore/underscore-min.js', 
    'googleAnalytics': '//www.google-analytics.com/analytics.js' 
}, 

Как я могу предоставить подобное сопоставление для tsc?

Это другой вопрос, кажется, указывает на хорошее направление: How to avoid imports with very long relative paths in Angular 2?

Typescript 2,0, кажется, поддерживает paths конфигурации для tsconfig.json. Есть ли способ скачать Typescript 2.0? Могу ли я предоставить конфигурацию path http url (//www.google-analytics.com/analytics.js), как я делаю с SystemJS? Если нет способа загрузить Typescript 2.0, как я могу добиться того, что хочу с текущей версией?

Редактировать

Специфическая ошибка, я получаю: «Не удается найти модуль" га».

Вот мой tsconfig.json:

{ 
    "compilerOptions": { 
     "rootDir": "./", 
     "target": "es5", 
     "module": "system", 
     "moduleResolution": "node", 
     "emitDecoratorMetadata": true, 
     "experimentalDecorators": true, 
     "noImplicitAny": true 
    }, 
    "exclude": [ 
     "node_modules", 
     "front-end/node_modules", 
     "typings/main", 
     "typings/main.d.ts" 
    ] 
} 
+0

Я надеваю 't думаю, что TypScript 2 уже выпущен. https://github.com/Microsoft/TypeScript/tags – jasonszhao

+0

Действительно, похоже, что он не был выпущен. – maximedupre

+0

Что произойдет, если вы импортируете его так: import {ga} из 'googleAnalytics'; ' – iberbeu

ответ

1

Я думаю, вы понимаете, что в случае машинописной сборщика transpiler ищет определенные файлы типов. Ему нужно знать определение типа внешнего модуля. В случае, если у вас есть активное разрешение модуля nodejs (у вас есть), и вы используете не относительный путь (вы делаете), вы должны добавить в свой каталог node_modules проекта (возможно, у вас его уже есть), и в этот каталог добавьте googleAnalytics.d.ts файл или вы можете создать каталог node_modules/googleAnalytics, а затем добавить там index.d.ts.Типы определений для Google Analytics можно загрузить с DefintelyTyped repository

более

информации о разрешении модуля here

EDIT: в соответствии ваш комментарий может быть, вам придется добавить экспорт MODUL в файл определения Google

declare module 'googleAnalytics' { 
    export = UniversalAnalytics; 
} 
+1

Ручное создание папки в 'node_modules' - очень плохая практика. Вы должны редко (если не никогда) изменять эту папку. Компилятор машинописного текста также ищет [декларации об амбиентных модулях] (https://www.typescriptlang.org/docs/handbook/modules.html#working-with-other-javascript-libraries), что и предлагалось @jasonszhao, но оно похоже, что определение типа Google Analytics ничего не экспортирует. – maximedupre

+1

Отлично, я не знал этого. –

+0

В качестве продолжения вашего редактирования: вы правы, но это будет 'export = ga' вместо' export = UniversalAnalytics'. Ура! – maximedupre

1

Эту проблему можно было обойти с Typescript Type Definitions.

Чтобы использовать определение:

  1. Поместите определение типа в каталоге. Преданные - DefinitelyTyped.
  2. Добавьте эту строку в файл .ts, который необходимо импортировать Google Analytics:

    /// <reference path="ga.d.ts" /> 
    

Update

Он работал для меня, когда я побежал tsc , Извините, что я забыл добавить:

  1. Рефакторинг для ga в ваших и картографировании SystemJS.

Это не означает, что компилятор знает, что ему нужно проверить файл SystemJS, но он просто действует как заполнитель для импортируемого модуля, так что не возникает никакой ошибки, и мы можем фактически разрешить модуль во время выполнения с SystemJS.

+0

Я не думал, что это сработает, но я все еще пробовал (и это не сработало). Как этот файл 'd.ts' предположил бы сказать' tsc', что найти модуль 'googleAnalytics', ему нужно посмотреть на отображение SystemJs (или, по крайней мере, иметь такое же сопоставление)? Возможно, ему не нужно знать сопоставление, но найти только соответствующий файл 'd.ts', но как бы компилятор' tsc' связывает имя настраиваемого модуля, например 'googleAnalytics', с' ga.d.ts'? – maximedupre

+0

@maximedupre Я обновил свой ответ. – jasonszhao

+0

Это все еще не работает, может быть, потому что 'd.ts' не объявляет модуль? https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/google.analytics/ga.d.ts – maximedupre