2016-04-21 3 views
1

Я пытаюсь написать свой код интерфейса в TypScript и хочу экспортировать код, который мой браузер может загрузить в <script src="..."></script>.Transpile машинописный текст для использования в браузере

Я сделал это с помощью браузера и tsify. Моя проблема в том, что не в моем коде доступно глобальное пространство имен. Загрузка сценария в тег <script> будет выполнять его, конечно, но что, если я намерен загрузить его как библиотеку функций, которые могут использоваться в inline <script> или аналогичные?

Обновление

В качестве примера можно

index.ts

function foo(): void { 
    console.log("bar"); 
} 

Сборка со следующим конф производит следующие код JavaScript

tsconfig.json

{ 
    "compilerOptions": { 
     "module": "UMD", 
     "target": "es5", 
     "noImplicitAny": true, 
     "removeComments": true, 
     "preserveConstEnums": true, 
     "sourceMap": true 
    } 
} 

index.js

function foo() { 
    console.log("bar"); 
} 

Это нормально. Однако, если index.js импортирует что-то, например. моя notification функция, то я получаю это

(function (factory) { 
    if (typeof module === 'object' && typeof module.exports === 'object') { 
     var v = factory(require, exports); if (v !== undefined) module.exports = v; 
    } 
    else if (typeof define === 'function' && define.amd) { 
     define(["require", "exports", "./notifications"], factory); 
    } 
})(function (require, exports) { 
    "use strict"; 
    var notifications_1 = require("./notifications"); 
    notifications_1.notification("blerp"); 
    function foo() { 
     console.log("bar"); 
    } 
}); 

Теперь foo обернут в некотором объеме, и не доступен, когда я загрузить его на моем сайте: <script src="require.js" data-main="index"></script>

foo is undefined 
+0

Для того, чтобы быть понятным, вы создаете несколько файлов машинописного текста, и вы используете browserfy для их компиляции. И тогда вы хотите, чтобы эти функции были доступны во всем мире? – vintem

ответ

3

До загрузки модуля земли в браузерах как встроенную функцию JavaScript, вы можете использовать библиотеку, такую ​​как RequireJS или SystemJS, для загрузки модулей.

При использовании RequireJS, вы просто передать параметр компилятора:

-module UMD 

А затем указать RequireJS в основной файл:

<script src="require.js" data-main="app"></script> 

Модули затем загружаются асинхронно по требованию и жизнь хороша.

+0

Является ли загрузка модуля даже желаемой? Если мой основной файл импортирует/требует некоторые файлы, вместо того, чтобы оставлять запрос «требовать» в преобразованном коде, невозможно, чтобы необходимые файлы были просто конкатенированы. – Eldamir

+0

Да. Загрузка модуля настолько впечатляющая, что она становится родной функцией ECMAScript. Слияние файлов только доводит вас до сих пор ... https://www.stevefenton.co.uk/2016/02/bundling-is-the-new-parrot-word/ * «Разница между группировкой и загрузкой модуля менее заметна в крайнем левом углу шкалы (т. е. небольшое количество кода) и заканчивается массово в пользу модулей в крайнем правом углу шкалы. "* – Fenton

+0

Хорошо читайте. Итак, теперь у меня есть исходный файл .ts в моей статической папке рядом с require.js. Я скомпилировал файл .ts с помощью '-module UMD'. Теперь я загружаю скомпилированный .js-файл с require.js, как вы показали мне. Тем не менее, я до сих пор не могу получить доступ к функциям.Они, кажется, находятся в скрытом объеме. – Eldamir

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