Typescript:编译文件而不镜像目录层次结构

bakd9h0s  于 2023-02-10  发布在  TypeScript
关注(0)|答案(5)|浏览(143)

我正在使用VS代码制作一个HTML5游戏,使用的是TypeScript(JS)。项目变得有点大,我想把输出存储在不同的目录中。问题是,无论何时我编译所有内容,它都会镜像原始目录层次结构。因此,举个例子:

-dir1
--dir2
--dir3
---dir4

产出:

-dir1
--dir2
--dir3
---dir4

(the相同)
我想要:

-dir1
*.js

我试过Grunt/Gulp/VSCode自己的TaskRunner,但是没有任何效果,而且"keepDirectoryHierarchy"似乎已经过时了。

pdtvr36n

pdtvr36n1#

VS代码支持两种类型脚本编译方式:

1.使用*tsconfig*进行本机编译
1.使用JavaScript * 任务运行程序 *,如
Gulp
Grunt

使用***tsconfig***进行本机编译

1.在根目录

中创建文件tsconfig.json
1.将下一个配置放入其中

{
   "version": "1.6.0-beta",
   "compilerOptions": {
      "target": "es5",
      "declaration": true,
      "noImplicitAny": false,
      "removeComments": true,
      "noLib": false,
      "emitDecoratorMetadata": true,
      "sourceMap": true,
      "listFiles": true,
      "outDir": "",
      "out": "./Compiled/mycompiled.js", // here specify your output file( it would be contain all your compiled ts file in one) 
      "experimentalDecorators": true
   },
   "files": [ // file list (optional)
     "somefile.ts"
   ]
}

1.配置VS代码任务运行程序

使用JavaScript * 任务运行程序 *,如GulpGrunt

当前示例显示了如何修改gulpfile. js以使用gulp-typescript编译项目

gulp.task('build', function () {
    var tsResult = gulp.src('src/**/*.ts') // here specify your file location or folders
                     .pipe(ts({ // gulp-typescript configuration
                               noImplicitAny: true,
                               out: 'output.js'// here specify your output file( it would be contain all your compiled ts file in one) 
                              }));

    return 
        tsResult.js
            .pipe(gulp.dest('./')); // here you can specify your output directory too
});

问题解决方案

对于您的情况,您可以选择这两种解决方案。注意代码注解,并根据需要指定输出目录和编译的js文件的名称。
祝你好运!

资源

  1. Gulp Typescript NPM.
  2. Using TypeScript in Visual Studio Code (MSDN Blog).
  3. Typescript tsconfig.json specification
  4. Using Task Runner in VS Code
5hcedyr0

5hcedyr02#

我想明白了,我做了一个自定义的Grunt任务,虽然不是最优的,但是可以完成任务。

module.exports = function(grunt) {
    grunt.loadNpmTasks("grunt-typescript");
    grunt.loadNpmTasks("grunt-contrib-watch");
    grunt.loadNpmTasks('grunt-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');

    grunt.initConfig({
        typescript: {
            base: {
                src: ['./client/**/*.ts'],
                dest: './temp',
                options: {
                    'module': 'commonjs',
                    target: 'es5',
                    sourceMap: true
                }
            }
        },
        copy: {
            main: {
                files: [
                    {
                        src: ['./temp/**/*.js', './temp/**/*.js.map'],
                        dest: './build/',
                        flatten: true,
                        expand: true
                    }
                ]
            }
        },
        clean: [
            './temp'
        ],
        watch: {
            scripts: {
                files: ['./client/**/*.ts'],
                tasks: ['typescript', 'copy', 'clean']
            }
        }
  });

  grunt.registerTask("default", ['typescript', 'copy', 'clean', 'watch']);
};
vltsax25

vltsax253#

我认为你需要给予Gulp或另一个任务运行者看一看。你将需要几个步骤来实现你正在寻找的。

  • 编译 typescript
  • 连接文件
  • 清除多余文件

我用类似的系统与咖啡脚本和它的工作很好。

yfwxisqw

yfwxisqw4#

大口喝应该可以。可以使用the flatten plugin
我会用 Gulp -压平法:

var flatten = require('gulp-flatten');
gulp.task('compile', function() {
  gulp.src('src/**/*.ts')
   .pipe(tsc())                    //compile them
   .pipe(flatten())                //change their relative path to point to one dir
   .pipe(gulp.dest('build'));      //write them in destination
});
8fq7wneg

8fq7wneg5#

我使用带有typescript插件的汇总来完成这类工作。

npm i rollup
npm i @rollup/plugin-typescript

然后按照这些库中的文档进行操作。

相关问题