使用Node与Visual Studio和outDir构建打字稿

时间:2017-07-06 12:01:39

标签: node.js visual-studio typescript

我有一个可以使用Visual Studio构建的打字稿项目,我也可以使用节点构建。但他们似乎都表现得略有不同。我的项目看起来像这样(简化):

.
+-- app
|   +-- app.component.ts
|   +-- app.module.ts
|   +-- main.ts
+-- dist
+-- system.config.js
+-- tsconfig.json
+-- packages.json

现在,当我构建时,我想将所有文件输出到dist文件夹中。因此我的tsconfig.json设置为outDir,如下所示:

{
  "compileOnSave": true,
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "es2015", "dom" ],
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true,
    "outDir": "dist"

  },
  "exclude": [
    "node_modules/*",
    "packages/*",
    "**/*-aot.ts"
  ]
}

现在,当我使用节点构建时,使用npm run tsc dist文件夹如下所示:

+-- dist
|   +-- app
|   |   +-- main.js
|   |   +-- app.module.js
|   |   +-- app.component.js

使用visual studio进行构建时:

+-- dist
|   +-- main.js
|   +-- app.module.js
|   +-- app.component.js

如您所见,Visual Studio构建不会将所有文件放在app文件夹中。但节点构建确实如此。

为什么两者都不一样,因为他们使用相同的配置?

3 个答案:

答案 0 :(得分:0)

  

为什么两者都不一样,因为他们使用相同的配置?

你的假设是错误的。 VS没有使用这个tsconfig.json。

快速修复

在visual studio中创建一个新的TypeScript项目并复制文件。

硬修复

通过编辑项目文件找出Visual Studio正在使用的内容。

答案 1 :(得分:0)

Visual Studio使用MSBuild TypeScript任务。它可能没有使用tsconfig文件,或者存在一些冲突。打开csproj文件,查看TypeScript特定节点。在Visual Studio中,您可以通过右键单击项目,查看属性和选择TypeScript选项卡来控制这些节点的大多数值。

从2015年开始,Visual Studio称为have support for tsconfig files(使用TypeScript 1.8),但根据您的Visual Studio版本,that's debatable。似乎有很多仍然存在问题。

检查的一种方法是运行msbuild from the command line,指向您的csproj文件,并检查输出。它应包含tsc输出,该输出应显示msbuild是否正在使用tsconfig文件,而不是tsc的调用是使用-p还是{{1}切换。如果是,则它正在尝试使用您的tsconfig。

此时,您正在编译两种不同的方式(可能进行第三次测试):

  • --project
  • Visual Studio构建
  • npm run tsc

使用tsc -p .运行它以查看它是否与Visual Studio匹配,并且npm任务可能导致问题。无论哪种方式,您可能需要查看tsc -p .的{​​{3}},这可能会帮助您解决差异。

答案 2 :(得分:0)

由于我的应用程序正在使用Nuget包,它还包含typescript文件。

  • 在构建时,Visual Studio会将包文件夹添加到项目的根目录中。其中一个软件包包含* .ts Typescript文件。
  • Visual Studio将调整输出的文件夹结构以合并这些文件。而npm run tsc不会。

解决方案是:

  • 删除packages文件夹并使用visual studio构建;或
  • 使用nuget.config文件将packages文件夹移动到app文件夹内的其他位置,或者移动到项目范围之外的某个级别。