【问题标题】:How to produce Typescript output to correct destinations?如何生成 Typescript 输出以正确的目的地?
【发布时间】:2026-01-23 08:55:02
【问题描述】:

我正在使用 Typescript 重新实现现有功能,并且我想使用 Jasmine 进行测试。我已经开始使用带有 Javascript 规范的 Jasmine,但感觉不对。现在我尝试使用 Typescript 规范(感觉不错),但我无法找到正确的配置来在正确的位置生成 javascript 文件。

我正在使用:

  • 咕噜声
  • 茉莉花
  • 打字稿

结构如下:

/base_dir
  /src
    *.ts files
  /src-spec
    *.ts files (only specs)
  /spec
    *.js files (generated by typescript compiler I hope)
  /lib/js
    *.js files (generated by typescript compiler as well)

我目前为 Grunt 定义了以下配置:

ts: {
  libs : {
    src: ["src/*.ts", "!node_modules/**"],
    outDir: 'lib/js',
    options: {
        keepDirectoryHierarchy: false,
        rootDir: "lib/js"
    }
  },
  specs : {
      src: ["src-spec/*.ts"],
      outDir: ['spec'],
      options: {
          rootDir: "spec",
          keepDirectoryHierarchy: false
      }
  }

但生成的目录结构如下:

/lib/js/*.js files   // produced correctly
/spec/src/*.js       // same content as /lib/js
/spec/src-spec/*.js  // the corresponding spec file

当我运行 Jasmine 时,/spec/src-spec/ 中的规范文件找不到位于 /lib/js/spec/src 中的库。

这里推荐的解决方案是什么

  • 目录设置
  • 用于编译的参数

【问题讨论】:

    标签: javascript typescript gruntjs jasmine


    【解决方案1】:

    这里推荐的解决方案是什么

    我个人喜欢使用单个 tsconfig.json 进行 IDE 集成。 src 中的所有内容(包括测试)与 outDirlib。最后简单.npmignorelib/tests

    更多

    srclib 的组织在这里介绍:https://basarat.gitbooks.io/typescript/content/docs/quick/nodejs.html

    【讨论】:

    • 答案给了我正确的起点,我添加了另一个答案只是为了说明我的解决方案(不遵循tsconfig.json 建议)。
    【解决方案2】:

    @basarat 的回答给了我正确的方向,这里是适合我上面问题的解决方案:

    将结构改为:

    /src
      *.ts        (app files)
      tests/*.ts  (test files)
    /lib/js
      *.js        (generated app files)
      tests/*.js  (generated test files)
    jasmine.json   (configuration for the changed paths)
    

    jasmine.json 必须改为:

    {
      "spec_dir": "lib/js/tests"
      ...
    }
    

    Gruntfile.js 必须改为:

    jasmine: {
            exec: 'jasmine.cmd JASMINE_CONFIG_PATH=jasmine.json'
        }
    

    之后,所有文件都照常编译,放到正确的地方,app文件对其他文件和spec文件对app文件的引用是稳定的。

    【讨论】: