Typescript не может найти модуль, сопоставленный с SystemJS

Typescript не находит модуль в этом импорте import ga from 'googleAnalytics';

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?

Этот другой вопрос, кажется, указывает в правильном направлении: 2">Как избежать импорта с очень длинными относительными путями в Angular 2?

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

Изменить

Конкретная ошибка, которую я получаю: «Не удается найти модуль« ga »».

Вот мой 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"
    ]
}

person maximedupre    schedule 06.05.2016    source источник
comment
Я не думаю, что Typescript 2 еще не выпущен. github.com/Microsoft/TypeScript/tags   -  person user    schedule 10.05.2016
comment
Действительно, не похоже, что он был выпущен.   -  person maximedupre    schedule 10.05.2016
comment
что произойдет, если вы импортируете его вот так import {ga} from 'googleAnalytics';   -  person iberbeu    schedule 12.05.2016
comment
Та же ошибка. Делаю ли я import ga, import {ga} или import * не имеет значения, потому что он не находит модуль googleAnalytics. Причина, по которой я получаю сообщение об ошибке Cannot find module 'ga', заключается в том, что @jasonszhao сказал мне переименовать googleAnalytics в ga (см. единственный ответ ниже). Я признаю, что это сбивает с толку!   -  person maximedupre    schedule 12.05.2016


Ответы (2)


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

подробнее о разрешении модуля здесь

РЕДАКТИРОВАТЬ: в соответствии с вашим комментарием, возможно, вам придется добавить экспорт модуля в файл определения Google.

declare module 'googleAnalytics' {
    export = UniversalAnalytics;
}
person Stanislav Šolc    schedule 15.05.2016
comment
Создание папки вручную в node_modules — очень плохая практика. Вы должны редко (если не никогда) изменять эту папку. Компилятор машинописного текста также ищет объявления модуля ambiant, что и предложил @jasonszhao, но похоже, что определение типа Google Analytics ничего не экспортирует. - person maximedupre; 15.05.2016
comment
Отлично я этого не знал. - person Stanislav Šolc; 16.05.2016
comment
В дополнение к вашему редактированию: вы правы, но это будет export = ga вместо export = UniversalAnalytics . Ваше здоровье! - person maximedupre; 02.06.2016

Эту проблему можно обойти с помощью типа машинописного текста. Определения.

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

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

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

Обновить

У меня это сработало, когда я запустил tsc. Извините, забыл добавить:

  1. Рефакторинг на ga в сопоставлении import и SystemJS.

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

person user    schedule 10.05.2016
comment
Я не думал, что это сработает, но я все же попробовал (и это не сработало). Как этот файл d.ts должен сообщить tsc, что для поиска модуля googleAnalytics ему нужно посмотреть сопоставление SystemJs (или, по крайней мере, иметь такое же сопоставление)? Может быть, ему не нужно знать сопоставление, а только найти соответствующий файл d.ts, но как компилятор tsc свяжет имя пользовательского модуля, такое как googleAnalytics, с ga.d.ts? - person maximedupre; 10.05.2016
comment
Это все еще не работает, может быть, потому что d.ts не объявляет модуль? github.com/DefinitelyTyped/DefinitelyTyped/blob/master/ - person maximedupre; 10.05.2016
comment
Я отредактировал свой вопрос с дополнительной информацией. - person maximedupre; 11.05.2016