我有一个可以使用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文件夹中。但节点构建确实如此。
为什么两者都不一样,因为他们使用相同的配置?
答案 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
npm run tsc
使用tsc -p .
运行它以查看它是否与Visual Studio匹配,并且npm任务可能导致问题。无论哪种方式,您可能需要查看tsc -p .
的{{3}},这可能会帮助您解决差异。
答案 2 :(得分:0)
由于我的应用程序正在使用Nuget包,它还包含typescript文件。
npm run tsc
不会。解决方案是: