2016-01-15 2 views
2

В контексте приложения Node.js/Express/Angular2/typescript (IDE = Visual Studio) я пытаюсь загрузить стороннюю утилиту .js (пакет) на клиентскую сторону (для использования в директиве). Кто-то сделал для него определения машинописного текста. Файл d.ts выглядит следующим образом:Angular2 - требуется модуль на стороне клиента

declare module "packery" { 
    interface PackeryOptions { stuff... } 
    class Packery { stuff .... } 
    export = Packery; 
} 

Я имею в виду этот d.ts файл, указать браузеру, где живет .js packery сценарий, а затем импортировать модуль как таковой:

import Packery = require('packery'); 

Это компилируется без жалобы. Однако при запуске браузер пытается (и не удается) найти «упаковку» в http://localhost/packery, а не в том, что он знает, что это пакетная библиотека. Это в отличие от других операторов импорта, которые я сделал на клиенте, например:

import {Http, HTTP_PROVIDERS} from 'angular2/http'; 

, которые работают - насколько я могу сказать только две части информации, которую я дал для тех, были также d. ts-файл и расположение файла .js, как и пакет. Но, должно быть, я что-то упускаю. Попробовали множество комбинаций мест размещения файлов и ссылок и не могли заставить его работать. Как я могу получить правильную ссылку на «упаковку»?

Спасибо!

+0

как @Langley указал ниже. D.ts файлы - это только файлы определений, они не содержат никакого фактического кода из самой библиотеки. Если вы обновите свой вопрос информацией о том, как вы создаете приложение (Webpack/SystemJs/other), мы можем предоставить дополнительную информацию о том, как загрузить библиотеку. – Zyzle

+0

Спасибо. Я понимаю, что d.ts - это только определения. Мой вопрос следующий. Это заявление компилируется и работает: import {Http, HTTP_PROVIDERS} из 'angular2/http'; если у вас есть d.ts в вашей среде IDE и правильная ссылка, скажем, index.html. Браузер не переходит к «localhost/angular2/http», чтобы попытаться извлечь модуль, он точно знает его расположение. С упаковкой у меня также есть ссылка d.ts и соответствующая ссылка .js в index.html.Он компилируется, но во время выполнения оператор require вызывает нагрузку с «localhost/packery». Должно быть дополнительное сопоставление или ссылка? –

+0

Что касается загрузчиков, я не испортил урон по умолчанию, и я понимаю, что systemjs по умолчанию (я загружаю system.js в index.html). Благодаря! –

ответ

0

Примерами являются пустые определения библиотек js, которые не написаны на типизированном языке. Они полезны только для разработки для подсказок IDE и т. Д., В вашем приложении вы все равно будете использовать библиотеку, как обычно, добавив файл js в ваш index.html или w/e, вы загрузите свои js-файлы.

1

Я нашел обходной путь для этого и думал, что я отправлю в случае это помогает любому, хотя я по-прежнему возникают трудности с установкой, поставленный в оригинальный вопрос, то есть получение заявления типа:

import foo = require('foo') 

для запуска на стороне КЛИЕНТА. Они работают для меня в node.js на сервере, но на клиенте, для сторонних библиотек, которые были загружены с помощью тега скрипта, я не могу заставить его работать, даже если я добавлю записи сопоставления в файл конфигурации system.js , независимо от того, указываю ли я на файл .js или файл d.ts.

Во всяком случае, что делает работу, если вы загрузите библиотеку с помощью тега сценария, то в вашей IDE поместить ссылочный путь как таковой в верхней части кода на стороне клиента

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

и убедиться, что d .ts не объявляет модуль/пространство имен, а скорее экспортирует методы и т. д. напрямую. Это позволяет компиляции IDE без жалобы, а код на стороне клиента может обращаться к библиотеке сторонних разработчиков.

Однако я не уверен, что предпочтительнее или лучше всего делать то, что я сделал, или если нужно каким-то образом настроить System.js.

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