将RequireJS和TypeScript混合在一起-如何为生产进行编译?

将RequireJS和TypeScript混合在一起-如何为生产进行编译?,typescript,requirejs,Typescript,Requirejs,我不熟悉使用TypeScript和RequireJS,我正在转换一个用木偶网/主干网编写的大型应用程序 我对每个ts文件中的TypeScript依赖项和不符合AMD的文件的RequireJS配置垫片中的依赖项之间的关系感到困惑。我的应用程序使用ts文件和requirejs配置垫片部分中的单个文件和依赖项可以正常加载 我试着把我的打字脚本文件编译成一个输出文件;ts transpiler是否知道垫片部分中定义的依赖关系?这似乎不是因为我的单个输出文件没有所有必需的文件 这是错误的做法吗 谢谢…我不

我不熟悉使用TypeScript和RequireJS,我正在转换一个用木偶网/主干网编写的大型应用程序

我对每个ts文件中的TypeScript依赖项和不符合AMD的文件的RequireJS配置垫片中的依赖项之间的关系感到困惑。我的应用程序使用ts文件和requirejs配置垫片部分中的单个文件和依赖项可以正常加载

我试着把我的打字脚本文件编译成一个输出文件;ts transpiler是否知道垫片部分中定义的依赖关系?这似乎不是因为我的单个输出文件没有所有必需的文件

这是错误的做法吗


谢谢…

我不会尝试让TypeScript编译器执行绑定过程。相反,我将有一个两步构建过程

  • 将脚本文件键入javascript
  • 使用r.js将所有文件打包并缩小为一个.js文件
  • 你可以在这里找到r.js的内容:

    只是Mark答案的一个附加部分,带有现实生产要求JS设置,包括垫片:

    运行类型脚本编译器:

    tsc -p .
    
    具有以下项目级别 tsconfig.json

    {
      "compilerOptions": {
        "noImplicitAny": false,
        "noEmitOnError": true,
        "removeComments": false,
        "sourceMap": false,
        "target": "es5",
        "outDir": "scripts/dist",
    }
    
    接下来,此r.js命令将执行以下操作:

    node r.js -o buildSpec.js name=src/init mainConfigFile=deps.js baseUrl=../
    
    使用以下deps.js

    require.config({
    
        baseUrl: "scripts",
    
        // The shim config allows us to configure dependencies for
        // scripts that do not call define() to register a module
        shim: {
            'underscore': {
                exports: '_'
            },
            'jquery': {
                exports: '$'
            }
        },
        paths: {
            chartJs: '//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.bundle.min',
            appRouter: 'infra/appRouter',
            paymentsHub: 'infra/paymentsHub'
        }
    });
    
    buildSpec.js:

    ({
        out: "../target/app-optimized.js",
        include:['someExternalModule'],
        paths: {
           jquery: 'lib/jquery/2.2.4/jquery.min'
        }
    })
    
    require.config({
        urlArgs: window.siteVersion,
        waitSeconds: 20
    });
    
    require(['scripts/controller'], function () { ... });
    
    src/init.js:

    ({
        out: "../target/app-optimized.js",
        include:['someExternalModule'],
        paths: {
           jquery: 'lib/jquery/2.2.4/jquery.min'
        }
    })
    
    require.config({
        urlArgs: window.siteVersion,
        waitSeconds: 20
    });
    
    require(['scripts/controller'], function () { ... });
    

    我的理解是tsc将只合并它传输的TS文件。如果您想包含其他文件,如填隙片中提到的文件,则需要使用构建工具。但在这种情况下,你就不需要垫片了。您的目标是生成单个文件吗?谢谢您的回答。嗯,我想为大部分应用程序创建一个文件输出。我有一些实用程序文件,这些文件由我们应用套件中的不同应用程序共享(每个应用程序相当于一个页面)。我想为这些实用程序创建捆绑包(例如,jqueryplugins捆绑包、内部实用程序捆绑包等等)。以及应用程序特定代码的单个文件。我已经开始考虑使用requirejs来指定捆绑包,但我不清楚如何构建所有这些。提前谢谢。