首先:我知道命令行中tsc
和tsc -w
之间的区别。这不是问题,而是一种特殊的情况:
在VS Code的tsconfig中,我通过设置"watch":true
启用了观察者。这绝对是想要的。但现在问题是:
我有一些脚本应该安装整个VS Code项目环境(所以特定项目本身),并希望项目最初由tsc编译。但现在它在监视模式下编译它,因为tsconfig说这样做。我可以在这里例外吗?当最初在bat文件中编译时,我希望tsc不会自动将watch选项设置为true,但是如果tsconfig中的watch选项打开或关闭,则在编译时进行编译。
有没有办法实现这个目标?
谢谢!
答案 0 :(得分:0)
我终于通过简单地使用windows的重命名命令解决了它:
rem Rename the tsconfig to prevent the tsc-task from watching
rename "tsconfig.json" "temp-hide.json"
rename "setup-config.json" "tsconfig.json"
tsc
rem Undo renaming since the task finished
rename "tsconfig.json" "setup-config.json"
rename "temp-hide.json" "tsconfig.json"
在我的安装过程中,我将tsconfig.json重命名为temp-hide.json(因为tsconfig包含选项watch) 然后将setup-config.json重命名为tsconfig.json,以便这个文件 而是用来代替。
当所有文件都被重命名后,我终于执行命令tsc,和 执行该命令后,我将所有内容重命名为原始版本 文件名。
答案 1 :(得分:0)
您可以比基于重命名的解决方案做得更好。现在,问题在于,当您调用tsc
时,-w
(--watch
)标记会被compilerOptions.watch
中指定的tsconfig.json
值覆盖(位于调用与tsc
脚本相同的目录。我们将使用TypeScript 2.1中引入的功能:configuration inheritance。
tsconfig.json
(一次性模式)写下这里应该有的典型行为。这将是我们的基础(默认)tsconfig
文件。
{
"compilerOptions": {
"watch": false,
"module": "commonjs",
"target": "es6",
"sourceMap": true,
"inlineSources": true,
"strictNullChecks": true
}
}
tsconfig_w.json
(监视模式)现在我们为它编写一个扩展名,其中一个属性是更改:compilerOptions.watch
被覆盖为true
。
{
"extends": "./tsconfig.json",
"compilerOptions": {
"watch": true
}
}
tsc
之前,您在不提供任何进一步参数的情况下调用tsc
。现在,您应该明确指定它应该从哪个tsconfig
读取。
一次性:tsc --project tsconfig.json
(这是它将使用的默认文件,但让我们明确表示。)
观看:tsc --project tsconfig_w.json
注意:TypeScript 1.8中引入了--project
标记。
package.json
我倾向于将这些作为方便的脚本写入我的package.json
:
"scripts": {
"lib": "./node_modules/.bin/tsc --project tsconfig.json",
"libw": "./node_modules/.bin/tsc --project tsconfig_w.json"
}
然后,您只需运行npm run lib
或npm run libw
,具体取决于您需要的脚本。
注意:我已经在本地指定了TypeScript的路径而不是全局路径(因为我还没有全局安装它)。