Grunt a TypeScript на JavaScript с помощью uglify

У меня есть 4 TypeScript файла в каталоге ts. Я могу скомпилировать их все в один файл (main.js) с исходной картой (main.js.map) с помощью задачи typescript:base.

Однако при попытке uglify эти файлы не работают при компиляции более одного файла TypeScript. Это как будто uglify запутывается, когда sourceMapIn был создан с несколькими файлами.

Как бы вы скомпилировали проект TypeScript с несколькими файлами в один файл с исходным кодом (Back to the original ts files)

Здесь файл grunt:

module.exports = function (grunt) {
    grunt.initConfig({
        uglify: {
            dist: {
                options: {
                    sourceMap: '../js/main.min.map',
                    sourceMapIn: 'main.js.map',
                    sourceMapRoot: '../ts/'
                },
                files: {
                    '../js/main.min.js': ['main.js']
                }
            }
        },
        typescript: {
            base: {
                 src: ['**/*.ts'],
                 dest: '../js/main.js',
                 options: {
                     module: 'amd',
                     sourcemap: true,
                     declaration: false
                 }
             }

        }
    });

    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-typescript');

    grunt.file.setBase('../ts');

    grunt.registerTask('default', ['typescript:base', 'uglify:dist']);
};

Спасибо!

Ответ 1

Я попытался воспроизвести вашу проблему со следующей средой:

grunt: 0.4.1
grunt-contrib-uglify: 0.2.2
grunt-typescript: 0.2.4
nodejs: 0.10.15

Мне пришлось изменить uglify.dist.options.sourceMapIn на '../js/main.js.map' и uglify.dist.files['../js/main.min.js'] на ['../js/main.js'], i. е. укажите пути относительно местоположения файла grunt. Впоследствии компиляция работала безупречно, и оба ../js/main.min.js и ../js/main.min.map выглядели корректно.