1

由于输出的灵活性,我最近从使用 Web Essentials 切换到 grunt-ts 来编译我的 typescript 文件。我切换的部分原因是我不希望单独编译所有文件,也不希望将所有文件编译成单个文件。我想要两者兼而有之。由于我最近开始使用 grunt 来完成很多任务,我想我也可以切换我的 TS 版本。

这是我的 gruntfile

module.exports = function (grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        dirs: {
            distribution: 'script/dist',
            ts_root: 'script/src',
            ts_controllers: 'script/src/controllers'
        },
        ts: {
            apprunner: {
                src: ['<%= dirs.ts_root %>/main.ts'],
                out: '<%= dirs.distribution %>/src/main.js',
                options: {
                    target: 'es5'
                }
            },
            controllers: {
                src: ['<%= dirs.ts_controllers %>/*.ts'],
                out: '<%= dirs.distribution %>/src/controllers.js'
                options: {
                    target: 'es5'
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-ts');

    grunt.registerTask('default', ['ts']);
};

main.ts文件中,我必须引用其中一个 typescript 文件,该文件在编译时构成controllers.js文件的一部分。

所以我的main.js文件有以下内容:

/// <reference path="controllers/ExampleController.ts" />

var newExample = new wctApp.controllers.ExampleController();

Gruntcontrollers.js可以很好地编译我的文件:

var wctApp;
(function (wctApp) {
    (function (controllers) {
        var ExampleController = (function () {
            function ExampleController() {
            }
            return ExampleController;
        })();
        controllers.ExampleController = ExampleController;
    })(wctApp.controllers || (wctApp.controllers = {}));
    var controllers = wctApp.controllers;
})(wctApp || (wctApp = {}));

但它在main.js文件中编译相同的代码。

var wctApp;
(function (wctApp) {
    (function (controllers) {
        var ExampleController = (function () {
            function ExampleController() {
            }
            return ExampleController;
         })();
        controllers.ExampleController = ExampleController;
    })(wctApp.controllers || (wctApp.controllers = {}));
    var controllers = wctApp.controllers;
})(wctApp || (wctApp = {}));
;
var newExample = new wctApp.controllers.ExampleController();

如果我从主文件中删除引用,它将无法构建,因为它找不到 ExampleController。如何保留对该文件的引用,但阻止它在main.js文件中编译。

4

1 回答 1

0

不要使用out. 因为out将所有 TypeScript 文件合并为一个。而是使用outDir(如果您需要重定向到不同的文件夹)。或者最好不要使用任何东西(no outno outDir),它会将生成的 JS 放在文件旁边。

于 2014-08-20T04:12:29.157 回答