2016-01-31 3 views
3

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

Я хотел бы скомпилировать все файлы библиотеки в один файл library.js.

Я попытался использовать ts-компилятор с файлом tsconfig.json, а также скомпилировать с помощью задачи gulp, но в обоих случаях у меня возникают проблемы с порядком классов в выходном файле.

Также сгенерированный код имеет много IIFE

var MyLibrary; 
(function (MyLibrary) { 
..... 
})(MyLibrary || (MyLibrary = {})); 

Я предполагаю, что это должно быть там только один раз, а не для каждого класса, не так ли?

Моего tsconfig.json:

{ 
    "compilerOptions": { 
    "module": "amd", 
    "noImplicitAny": false, 
    "removeComments": true, 
    "preserveConstEnums": true, 
    "outFile": "dist/js/floor-map-designer.js", 
    "sourceMap": true 
    }, 
    "exclude": [ 
    "node_modules", 
    "dist", 
    "src/app.ts" 
    ] 
} 

и задача глотка конфигурация:

var tsProject = ts.createProject({ 
    declarationFiles: true, 
    noExternalResolve: false, 
    module: 'AMD', 
    removeComments: true, 
    outFile: "my-library.js", 
    exclude: ["app.ts", "config.ts"] 
}); 

var paths = { 
    npm: './node_modules/', 
    lib: "./lib/vendor/", 
    tsSource: ['./src/MyLibrary/**/*.ts', "./lib/typings/tsd.d.ts"], 
    tsOutput: "./dist/js/", 
    tsDef: "./lib/typings/" 
}; 

gulp.task('ts-compile', function() { 
    var tsResult = gulp.src(paths.tsSource) 
        .pipe(ts(tsProject)); 

    return merge([ 
     tsResult.dts.pipe(gulp.dest(paths.tsDef)), 
     tsResult.js.pipe(gulp.dest(paths.tsOutput)) 
    ]); 
}); 

Я помню последний раз я использовал машинопись я использовал для создания автоматически сформированного отпечатком с большим количеством

/// <reference path="...." 

и добавить /// <ts:autoRef="referencesFile.ts"> ко всем файлам .ts.

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

Я также заметил, что использование опции -out считается плохим (по крайней мере, на этом сайте: https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md), но как его заменить?

Я использую машинописную версию 1.7.

ответ

1

Я также заметил, что использование опции -out считается плохим (по крайней мере, на этом сайте: https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md), но как его заменить?

Используйте модули: https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

В вашем случае изменение:

module: 'AMD', 
removeComments: true, 
outFile: "my-library.js", 

к

module: 'amd', 
removeComments: true, 

и использовать модуль загрузчика (для AMD, которые были бы requirejs http://requirejs.org/)

+0

Хорошо, я попробую. Означает ли это, что мне придется добавлять импорт даже для внутренних зависимостей модулей? Пример: класс A расширяет B - мне нужно импортировать B? – Klinki

+0

Да. Если вы этого не сделаете, вам нужно управлять заказом самостоятельно таким образом, который отключен от фактического источника (например, массив файлов, хакеры файлов ссылок и т. Д.) – basarat

+0

Спасибо за совет, я попытался использовать модули RequireJS и AMD, но это не так «Я очень хорошо работаю для меня. RequireJS, похоже, очень глючит в Google Chrome (он даже не загружает основной файл данных, когда консоль разработчика открыта). И я бы предпочел, чтобы моя библиотека была объединена в один файл. Думаю, для меня было бы нормально загружать этот конкатенированный файл с помощью requireJS, но я не хочу загружать каждый отдельный класс и интерфейс. – Klinki