Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将带有RequireJs和Grunt的TypeScript编译到单个文件中_Javascript_Gruntjs_Requirejs_Typescript - Fatal编程技术网

Javascript 将带有RequireJs和Grunt的TypeScript编译到单个文件中

Javascript 将带有RequireJs和Grunt的TypeScript编译到单个文件中,javascript,gruntjs,requirejs,typescript,Javascript,Gruntjs,Requirejs,Typescript,我们正试图通过使用Grunt将包含许多文件的TypeScript项目编译成一个支持AMD的文件来优化它。我们已经研究了所有我们能在互联网上找到的东西,但仍在努力掌握这项任务。只要我们不使用外部导入,编译就可以正常工作,但一旦我们引用了外部库,编译过程就会失败。例如: MyClass1.ts import jquery = require('jquery'); export class MyClass1{ //some code using jquery } MyClass2.ts i

我们正试图通过使用Grunt将包含许多文件的TypeScript项目编译成一个支持AMD的文件来优化它。我们已经研究了所有我们能在互联网上找到的东西,但仍在努力掌握这项任务。只要我们不使用外部导入,编译就可以正常工作,但一旦我们引用了外部库,编译过程就会失败。例如:

  • MyClass1.ts

    import jquery = require('jquery');
    export class MyClass1{
       //some code using jquery 
    }
    
  • MyClass2.ts

    import jquery = require('jquery');
    export class MyClass2{
       //some other code using jquery 
    }
    
  • 在这种情况下,即使在使用

     tsc --out singlefile.js ...
    
    实际上不包括这两个文件。相反,它们将单独留下适当的RequireJs
    define
    语句。我们知道,使用Grunt的requirejs任务可以将所有这些文件连接到一个文件中,但是这需要我们将
    import
    语句放在内部项目中,而这些语句是不需要的

    我们正在寻找的是一种连接所有TypeScript文件的方法,即它们捆绑所有需要的导入,并且它们包括一个
    define
    块,该块具有收集到的所有类的所有外部依赖项

    到目前为止,我们还没有找到将多个
    define
    语句优化为单个define块的Grunt任务。我们可以看到两种策略:

  • 将所有TypeScript文件连接到一个文件中并编译它。问题:如何处理多个
    import
    语句(例如,在上面的示例中,
    MyClass1
    MyClass2
    都依赖于jquery),这会导致TypeScript编译错误
  • 单独编译每个文件,并将事后多个
    define
    块缩减为单个块
  • 有人解决了这个问题吗?使用Grunt/require处理具有外部依赖关系的多个文件的最佳实践是什么?是否有任何实用程序允许我们重构TypeScript以处理多个导入(类似于Roslyn for C#)?

    您可以使用它在开发时加载模块,并将所有需要的文件捆绑到一个文件中。

    您不应该使用--out,因为它试图找出依赖项顺序,并且在您有外部依赖项和AMD模块时会填充。它速度慢,在较大的项目中确实无法维护

    实现有效构建的最佳方法是编译成多个.js文件,然后在下一个构建步骤(rjs/systemjs/webpack)中使用绑定器,或者在切换到commonJS模块时进行浏览