将打字稿文件分组到多个outFile中

时间:2016-07-07 04:47:29

标签: typescript

是否可以将打字稿文件分组到多个outFile中?我仍然希望将我的Typescript捆绑,但不要捆绑到一个JS文件中,我想将我的TS分组到几个JS文件,例如controllers.js,plugins.js。 TypeScript项目选项似乎只提供一个outfile选项。

2 个答案:

答案 0 :(得分:0)

不幸的是,这不是默认的TypeScript编译器行为。当我尝试模块化TypeScript应用程序时,我自己遇到了这个问题。

我决定用于解决该问题的解决方案:

  1. 再次开始使用旧的_references.ts文件。
  2. 不要使用TSC捆绑(只需编译为JavaScript)。
  3. 使用Gulp插件/函数解析_references.ts文件。我的想法:
  4. 
    
    var fs = require('fs');
    
    // Consts
    var PLUGIN_NAME = 'reference-parser';
    
    // Plugin level function (dealing with files)
    function referenceParser(fileName, prefix, filterParentReferences) {
        var references = [];
    
        var content = fs.readFileSync(fileName, 'utf8');
        content = content.replace(/\/\/\/ <reference path=("|')/g, prefix);
        content = content.replace(/.ts("|')\s*\/>,?/g, '.js');
    
        function readLines(input) {
            if (input.length === 0)
                return;
    
            var newLineIndex = input.indexOf('\r\n');
            if (newLineIndex >= 0) {
                var line = input.substring(0, newLineIndex).trim();
    
                readLine(line);
    
                if (input.length > (newLineIndex + 2))
                    readLines(input.substring(newLineIndex + 2));
            } else {
                readLine(input);
            }
        }
    
        function readLine(line) {
            if (line && line.length > 0) {
                //console.log('Line: ' + line);
    
                if (line.startsWith('//')) {
                    //console.log('Comment line, ignored.');
                } else if (line.indexOf('_references.ts') >= 0) {
                    //console.log('External reference line, ignored.'); // TODO Support this?
                } else if (filterParentReferences && line.startsWith('../')) {
                    //console.log('Parent reference, ignored.');
                } else {
                    references.push(line);
                }
            }
        }
    
        readLines(content);
        return references;
    }
    
    // Exporting the plugin main function
    module.exports = referenceParser;
    &#13;
    &#13;
    &#13;

    湾连接Gulp任务中的所有内容:

    &#13;
    &#13;
    //...
    
            // Get module source files by parsing the module's _references.ts file.
            var sourceFiles = referenceParser(sourceRoot + '_references.ts', buildJsRoot, true);
            // console.log(sourceFiles);
            var sourcesStream = gulp
                .src(sourceFiles)
                .pipe(plugins.sourcemaps.init({ loadMaps: true })) // Load TypeScript generated source maps
                .pipe(plugins.concat(module.name + '.Bundle.js'))
                .pipe(plugins.uglify({ mangle: false })) // Minify the resulting bundle
                .pipe(plugins.sourcemaps.write('.')) // Write the (merged) bundle source maps
                .pipe(gulp.dest(destinationRoot));
            moduleGulpStreams.add(sourcesStream); // Add the source stream to the stream merger
    
    //...
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

您可以通过创建多个tsconfig.json文件来实现。然后为每个out文件运行一次编译器:

tsc --config /path/to/first/tsconfig.json --outFile controllers.js
tsc --config /path/to/second/tsconfig.json -- outFile plugins.js