【问题标题】:Adding typescript import prevents compiling to a single js file添加 typescript 导入可防止编译为单个 js 文件
【发布时间】:2014-12-20 06:51:25
【问题描述】:

我使用 grunt-typescript 从一组 ts 文件生成单个 js 文件。在我将 import 语句添加到其中一个 ts 文件之前,这可以正常工作。

示例 grunt-typescript 配置

    typescript: {
        server: {
            src: ["./ts/file1.ts", "./ts/file2.ts"],
            dest: "./js/out.js",
            options: {
                module: 'amd', //or commonjs
                target: 'es5', //or es3
                basePath: '',
                sourcemap: false,
                declaration: false,
                ignoreError: false
            }
        }
    }

如果我在 file2.ts 的顶部添加一个 import 语句,例如

import PG = require("pg");

然后我收到错误,表明 File1.ts 中的代码找不到 File2.ts 中定义的类型,并且我在 /ts 目录中生成了一个意外的 File2.js,忽略了 dest 文件参数。导入似乎导致它完全单独编译 File2.ts。

这是预期的导入还是我如何解决这个问题以创建预期的单个 js 文件而不会出现编译错误?

【问题讨论】:

    标签: javascript gruntjs typescript


    【解决方案1】:

    一旦您导入 AMD 模块,或从任何内部模块外部导出,您的文件将被编译为 AMD 模块。 AMD 和单文件编译本质上是不同的工作模式,不喜欢混用。要了解内部模块和外部模块,请查看 this TypeScript wiki page

    从技术上讲,您仍然可以使用标准 JavaScript 方法导入 AMD 模块,但这很尴尬。例如,使用来自definitelyTyped 的require.d.ts 文件:

    /// <reference path="require.d.ts"/>
    
    require(["somemodule"], (SomeModule: namespace.SomeModule) => {
        // async code called after the module is retrieved
    });
    

    如果没有 import 关键字,TypeScript 不会对 require 执行任何操作,而是让您自己处理。

    另外,我建议使用完整的 AMD。如果您的任何库是 AMD 的,那么它更易于使用,并且您仍然可以在发布时compile down to a single file

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 2021-11-09
      • 2017-11-06
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2013-03-29
      • 2017-12-12
      相关资源
      最近更新 更多